本帖最后由 Kevin.Kang 于 2015-8-12 13:37 编辑
通过反射对配置文件中的类进行常见对象和调用方法,需要那个就改配置文件中的内容,不用修改程序代码就行。
Person类
- package com.kxg_03;
- public class Person {
- public void show() {
- System.out.println("Person");
- }
- }
复制代码 Teacher类
- package com.kxg_03;
- public class Teacher {
- public void show() {
- System.out.println("Teacher");
- }
- }
复制代码 Student类
- package com.kxg_03;
- public class Student {
- public void show() {
- System.out.println("Student");
- }
- }
复制代码
class.txt暂时替代配置文件
- className=com.kxg_03.Student//修改这里的类名就可以了,记得带上包名
- methodName=show//这里是需要调用类的方法
复制代码
测试类
- package com.kxg_03;
- import java.io.FileReader;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import java.util.Properties;
- /*
- * 通过配置文件运行类中的方法
- *
- * 需要有配置文件的配合,暂时用class.txt代替,里面数据以键值对形式存在
- * 并且知道其中的键:
- * className
- * methodName
- */
- public class Test {
- public static void main(String[] args) throws Exception {
- // 把class.txt文件加载到Properties集合中
- Properties p = new Properties();
- FileReader fr = new FileReader("class.txt");
- p.load(fr);
- fr.close();
- // 通过键找到对应的值
- String className = p.getProperty("className");
- String methodName = p.getProperty("methodName");
- // 根据获取字节码文件对象
- Class c = Class.forName(className);
- // 获取无参构造
- Constructor con = c.getConstructor();
- // 无参构造创建对象
- Object obj = con.newInstance();
- // 获取无参方法
- Method m = c.getMethod(methodName);
- // 调用方法
- m.invoke(obj);
- }
- }
复制代码
|
|