欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

反射案例:不改变该类的任何代码,可以创建任意类对象且执行任意方法

程序员文章站 2022-04-15 17:57:50
案例:​需求:写一个“框架”,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意的方法实现:1.配置文件2.反射步骤:1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中2.在程序中加载读取配置文件3.使用反射技术来加载类文件进内存​4.创建对象​5.执行方法配置文件package cn.reflect;import cn.domain.Person;import cn.domain.Student;import java...

需求:写一个“框架”,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意的方法

实现

  • 1.配置文件

  • 2.反射

步骤:

  • 1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
  • 2.在程序中加载读取配置文件
  • 3.使用反射技术来加载类文件进内存
  • 4.创建对象
  • 5.执行方法

配置文件
反射案例:不改变该类的任何代码,可以创建任意类对象且执行任意方法

package cn.reflect; import cn.domain.Person; import cn.domain.Student; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.util.Properties; /**
 * 框架类
 */ public class ReflectTest { public static void main(String[] args) throws Exception { //可以创建任意类的对象,可以执行任意方法 /**
         前提:不能改变该类的任何代码。可以创建任意类的对象,可以执行任意方法
         */ /* Person p = new Person();
        p.eat();
        Student stu = new Student();
        stu.sleep();*/ //1.加载配置文件 //1.1 创建Properties对象 Properties pro = new Properties(); //1.2 加载配置文件,转换为一个集合 //1.2.1 获取class目录下的配置文件 ClassLoader classLoader = ReflectTest.class.getClassLoader(); InputStream is = classLoader.getResourceAsStream("pro.properties"); pro.load(is); //2.获取配置文件中定义的数据 String className = pro.getProperty("className"); String methodName = pro.getProperty("methodName"); //3.加载该类进内存 Class cls = Class.forName(className); //4.创建对象 Object obj = cls.newInstance(); //5.获取方法对象 Method method = cls.getMethod(methodName); //6.执行方法 method.invoke(obj); } } 

本文地址:https://blog.csdn.net/weiyoo55/article/details/107890753

相关标签: 反射