java 反射 动态调用不同类的静态方法(推荐)

恩 ,下面这个小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 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 + "秒");
            }
        };

你可能感兴趣的:(java)