反射机制(二)

2021-04-03  本文已影响0人  coolTigers

本文例题同样出自B站UP主黎曼的猜想Java基础+进阶教程P466节
需求:写一个框架,不能改变该类的任何代码,帮助我们创建任意类的对象,并且执行其中任意方法
实现:
1、配置文件
2、反射、
步骤:
1、将需求创建的对象的全类名和需要执行的方法定义在配置文件中
2、在程序中家在读取配置文件
3、使用反射技术来家在类文件进内存
4、创建对象
5、执行方法
Person类

package com.company;

public class Person {
    public void eat(){
        System.out.println("eat...");
    }
}

pro.properties文件:

className=com.company.Person
methodName=eat

main函数:

package com.company;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class Main {

    public static void main(String[] args) throws Exception{
    // write your code here
 //       System.out.println("123abc");
        /*
        需求:写一个框架,不能改变该类的任何代码,帮助我们创建任意类的对象,并且执行其中任意方法
        实现:
        1、配置文件
        2、反射、
        步骤:
        1、将需求创建的对象的全类名和需要执行的方法定义在配置文件中
        2、在程序中家在读取配置文件
        3、使用反射技术来家在类文件进内存
        4、创建对象
        5、执行方法
        * */
        // 1、加载配置文件
        // 1.1 创建Properties对象
        Properties pro = new Properties();
        // 1.2 加载配置文件,转换为一个集合
        ClassLoader cl = Main.class.getClassLoader();
        InputStream is = cl.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);
    }
}

执行结果:


image.png
上一篇 下一篇

猜你喜欢

热点阅读