Reflect_2

package cn.itcast.test;
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 {
  // 反射前的做法
  // Student s = new Student();
  // s.love();
  // Teacher t = new Teacher();
  // t.love();
  // Worker w = new Worker();
  // w.love();
  // 反射后的做法
  // 加载键值对数据
  //Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
  Properties prop = new Properties();
  FileReader fr = new FileReader("class.txt");
  prop.load(fr);
  fr.close();
  
  // 获取数据
  String className = prop.getProperty("className");
  String methodName = prop.getProperty("methodName");
  
  // 反射
  Class<?> c = Class.forName(className);
  Constructor<?> con = c.getConstructor();
  Object obj = con.newInstance();//创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
  
  // 调用方法
  Method m = c.getMethod(methodName);
  m.invoke(obj);//调用由此 Method 对象表示的底层方法。
 }
}

package cn.itcast.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
/*
 * 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
 */
public class ArrayListDemo {
 public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
   IllegalArgumentException, InvocationTargetException {
  // 创建集合对象
  ArrayList<Integer> array = new ArrayList<Integer>();
  // array.add("hello");
  // array.add(10);
  // 获取集合ArrayList的class文件对象
  Class c = array.getClass();
  Method m = c.getMethod("add", Object.class);
  // 调用array的add方法,传入的值是hello
  m.invoke(array, "hello");
  m.invoke(array, "world");
  m.invoke(array, "java");
  StringBuffer sb = new StringBuffer();
  // String s = arraytoString(array);
  for (int x = 0; x < array.size(); x++) {
   if (x == array.size() - 1) {
    sb.append(array.get(x));
   } else {
    sb.append(array.get(x)).append(",");
   }
  }
  System.out.println(sb);
 }
}

原文地址:https://www.cnblogs.com/rong123/p/10429762.html