A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Kevin.Kang 于 2015-8-12 13:37 编辑
通过反射对配置文件中的类进行常见对象和调用方法,需要那个就改配置文件中的内容,不用修改程序代码就行。

Person类
  1. package com.kxg_03;

  2. public class Person {
  3.         public void show() {
  4.                 System.out.println("Person");
  5.         }
  6. }
复制代码
Teacher类
  1. package com.kxg_03;

  2. public class Teacher {
  3.         public void show() {
  4.                 System.out.println("Teacher");
  5.         }
  6. }
复制代码
Student类
  1. package com.kxg_03;

  2. public class Student {
  3.         public void show() {
  4.                 System.out.println("Student");
  5.         }
  6. }
复制代码



class.txt暂时替代配置文件
  1. className=com.kxg_03.Student//修改这里的类名就可以了,记得带上包名
  2. methodName=show//这里是需要调用类的方法
复制代码



测试类
  1. package com.kxg_03;

  2. import java.io.FileReader;
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Method;
  5. import java.util.Properties;

  6. /*
  7. * 通过配置文件运行类中的方法
  8. *
  9. *                 需要有配置文件的配合,暂时用class.txt代替,里面数据以键值对形式存在
  10. *                并且知道其中的键:
  11. *                                className
  12. *                                methodName         
  13. */
  14. public class Test {
  15.         public static void main(String[] args) throws Exception {
  16.                 // 把class.txt文件加载到Properties集合中
  17.                 Properties p = new Properties();
  18.                 FileReader fr = new FileReader("class.txt");
  19.                 p.load(fr);
  20.                 fr.close();

  21.                 // 通过键找到对应的值
  22.                 String className = p.getProperty("className");
  23.                 String methodName = p.getProperty("methodName");

  24.                 // 根据获取字节码文件对象
  25.                 Class c = Class.forName(className);
  26.                 // 获取无参构造
  27.                 Constructor con = c.getConstructor();
  28.                 // 无参构造创建对象
  29.                 Object obj = con.newInstance();

  30.                 // 获取无参方法
  31.                 Method m = c.getMethod(methodName);
  32.                 // 调用方法
  33.                 m.invoke(obj);
  34.         }
  35. }
复制代码


1 个回复

倒序浏览
赞一个,楼主写的很用心
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马