黑马程序员技术交流社区
标题:
利用反射调用无参数的的run方法的一个小问题问题。
[打印本页]
作者:
曾_强
时间:
2012-6-29 00:17
标题:
利用反射调用无参数的的run方法的一个小问题问题。
本帖最后由 曾_强 于 2012-6-29 08:47 编辑
通过配置文件,利用反射调用无参数的的run方法的一个小问题问题。
拥有run()方法的类。利用配置文件获取其类名。
public class DemoClass {
public void run(){
System.out.println("welcome!");
}
}
复制代码
config.properties文件中就是类名的。
className=DemoClass
复制代码
这都没有问题。在调用的是后出现问题:不知道在通过getMethod方法获取类中方法是参数不确定的问题。
public class PropertiesDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File confile = new File("config.properties");
if (!confile.exists()) {
confile.createNewFile();
}
FileInputStream fis = new FileInputStream(confile);
Properties prop = new Properties();
prop.load(fis);
prop.list(System.out);//控制台输出 :className=DemoClass 证明是读取到了配置文件
String className = prop.getProperty("className");
System.out.println(className);//输出类名,DemoClass。
/*Class clazz = Class.forName(className);
Method method = clazz.getMethod("run", null);
Object obj = clazz.newInstance();
method.invoke(obj, null);*/
Method methodRun = Class.forName(className).getMethod("run",void.class);
methodRun.invoke(obj, null);
}
}
复制代码
Class实例有9个预定义对象 (8种基本数据类型和void都有对应的Class对象),所以想到可能为void.class.
综上:
能够正确获取类名,想要利用反射:
类名.class
或者
ClassforName(类名)
去调用run()方法。
纠结于在调用getMethod方法获取类的run方法时
不知道参数类型的时候
,有没有什么办法解决啊?
Method methodRun = Class.forName(className).getMethod("run",void.class
/*参数类型怎么确定*/
);
methodRun.invoke(obj, null);//调用方法invoke里面的参数也不大清楚。
通过查阅API:
Class类中getMethod方法。
Method
getMethod
(
String
name,
Class
<?>... parameterTypes)
知道getMethod("方法名",
parameterTypes
);void时,设置为null .然后再利用自建Object对象,作为invoke参数传递。
Method methodRun = Class.forName(className).getMethod("run",
null
);
Object obj = Class.forName(className).newInstance();
methodRun.invoke(obj, null);
这样就行了。
thanks anyway !
话说刘兄超级敬业和夜猫呀。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2