本帖最后由 曾_强 于 2012-6-29 08:47 编辑
通过配置文件,利用反射调用无参数的的run方法的一个小问题问题。
拥有run()方法的类。利用配置文件获取其类名。- public class DemoClass {
- public void run(){
- System.out.println("welcome!");
- }
- }
复制代码 config.properties文件中就是类名的。这都没有问题。在调用的是后出现问题:不知道在通过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方法。
知道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 !
话说刘兄超级敬业和夜猫呀。
|
|