您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
11_反射_案例
发布时间:2022-07-04 23:37:35编辑:雪饮阅读()
反射案例这里的例子不算特别恰当,实际项目开发中会有更复杂的情况,用反射在这种情况下就很好。
这里主要是建立一个配置文件,然后通过加载配置文件中的类名及方法名来动态执行方法。
那么这个配置文件在这里默认要放在src目录下
这里第一个是我的入口的java类,第二个就是配置文件路径
那么配置文件中内容如:
className=day1.reflection.Person
methodName=getName
然后入口的java类中的具体实现:
package day1.reflection;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
public class index {
public static void main(String[] args) throws Exception{
//根据当前类名获取其的类加载器(ClassLoader)
ClassLoader classLoader=index.class.getClassLoader();
//通过ClassLoader的getResourceAsStream方法拿到配置文件的输入流
InputStream is=classLoader.getResourceAsStream("pro.properties");
//Properties的load方法接收一个配置文件的输入流,即可将配置文件输入流变成可以通过键名来获取配置文件中对应字段值的操作
Properties pro=new Properties();
//若没有这步load,则会导致下面获取的className等为null
pro.load(is);
String className=pro.getProperty("className");
String methodName=pro.getProperty("methodName");
//拿到类名(包含包名的完整路径)及方法名后就可以反射到对应类去执行方法了(这里假定实例化为name和age,被调用的这个方法是无参的)
Class cls1=Class.forName(className);
Method m1=cls1.getMethod(methodName);
//实例化person(以有参构造)
Constructor obj1=cls1.getConstructor(String.class,int.class);
//打印person类的name属性
System.out.println(m1.invoke(obj1.newInstance("kasumi",24)));
}
}
执行后的效果:
day1.reflection.Person
kasumi
Process finished with exit code 0
关键字词:java,反射,案例
下一篇:12_注解_概念