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

来源:互联网 发布:dem软件 编辑:程序博客网 时间:2024/05/14 13:58

恩 ,下面这个小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 + "秒");            }        };
原创粉丝点击