zoukankan      html  css  js  c++  java
  • 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);
     }
    }

  • 相关阅读:
    使用静态工厂方法的好处和坏处
    xUtils3源码分析(一):view的绑定
    在laravel之外使用eloquent
    ruby里面的毒瘤
    ruby的代码风格
    ruby里面的属性访问器
    ruby里面module和class的区别
    unity里面查找所有物体
    android studio安装须知
    intellij系列ide配置
  • 原文地址:https://www.cnblogs.com/rong123/p/10429762.html
Copyright © 2011-2022 走看看