恩 ,下面这个小demo还是不错的,大家可以借鉴一下
1、准备用反射的方式调用的类
package ss;
public class Use {
public static Integer demo( String s ){
System.err.println(s+"<<<<<<成功!");
Integer ss=1;
return ss;
}
}
2、调用
public class Ceshi {
public static void main(String[] args) {
try {
String className = "ss.Use";//这里注意了,是:包名.类名,只写类名会出问题的哦
Class<?> testClass = Class.forName(className);
Method saddMethod2 = testClass.getMethod("demo", new Class[]{String.class});
String result=saddMethod2.invoke(null,new Object[]{"测试反射"}).toString();
//虽然invoke(),方法里的参数是变参,但是,第一个的null还是需要的,原因大家可以看下源码
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
只是demo,大家可以根据自己的实际情况做更改。
例如下面我的代码—实现定时爬取多个网站的招标信息,就利用到了类的反射调用静态方法:
long time = System.currentTimeMillis();
TimerTask task = new TimerTask() {
@Override
public void run() {
List<BiddingCompany> biddingCompanyList;
try {
biddingCompanyList = BiddingService.biddingCompanyDAO.listAllAll();
for (BiddingCompany company : biddingCompanyList) {
Class<?> aClass = Class.forName(company.getMirror());
Method spider = aClass.getMethod("spider", BiddingCompany.class);
spider.invoke(null, company);
log.info("时间=" + new Date() + "执行了" + company.getCompanyName() + "招标信息爬取任务");
}
} catch (Exception e) {
e.printStackTrace();
}
log.info("共用时间:" + (System.currentTimeMillis() - time) / 1000 + "秒");
}
};