在以前,如果我们想要调用一个类中的方法,只能这样子:
例:
有Cat和Dog两个类,里面有eat和run两个成员方法:
1 public class Dog { 2 3 public void eat() { 4 System.out.println("狗吃肉"); 5 } 6 7 public void run() { 8 System.out.println("狗刨"); 9 } 10 }
public class Cat { public void eat() { System.out.println("猫吃鱼"); } public void run() { System.out.println("猫爬树"); } }
在之前,如果想要调用类里面的方法,只能这样:
这样做,有个缺点,如果类多了,方法多了,以后的更改很麻烦。
1 //之前的做法 2 Cat c = new Cat(); 3 c.eat(); 4 c.run(); 5 6 Dog d = new Dog(); 7 d.eat(); 8 d.run();
那么,为了以后的更改的方便。
创建个对应的配置文件,运用反射来访问这些方法:
配置文件:(Properties
类表示了一个持久的属性集。里面的内容就是键值对 “aaaa=bbb ”)
例:
1 ClassName=zl_Reclfect_05.Cat 2 MethodName=eat
创建个反射的类来通过配置文件调用类中的方法:
之后要想调用哪个类的哪个方法,只需要去配置文件更改相对应的键值就可以了。
1 //反射的做法 2 3 //Properties类: 4 //C、public String getProperty(String key):根据键获取值 5 6 //加载键值对数据 7 8 //首先创建个属性集类 9 Properties p = new Properties(); 10 //封装配置文件 11 FileReader file = new FileReader("class.txt"); 12 //获取键的集合 13 //void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 14 p.load(file); 15 file.close(); 16 17 //获取键的值(做配置文件,肯定知道键的) 18 String classname = p.getProperty("ClassName"); 19 String methodname = p.getProperty("MethodName"); 20 21 //用反射来调用成员方法 22 23 //获取字节文件对象 24 Class c = Class.forName(classname); 25 26 //无参构造创建对象 27 Constructor con = c.getConstructor(); 28 Object obj = con.newInstance(); 29 30 //调用方法 31 Method m = c.getMethod(methodname); 32 m.invoke(obj); 33 34 //之后要想调用哪个类的哪个方法,只需要去配置文件更改相对应的键值就可以了。
时间: 2024-10-13 02:27:39