黑马程序员技术交流社区
标题:
关于反射创建实例对象
[打印本页]
作者:
小路飞
时间:
2013-3-28 11:40
标题:
关于反射创建实例对象
本帖最后由 侯国奇 于 2013-3-29 10:28 编辑
InputStream ips = ReflectTest2.class.getResourceAsStream("config.properties");
Properties props = new Properties();
props.load(ips);
ips.close();
String className = props.getProperty("className");
Collection collections = (Collection)Class.forName(className).newInstance(); //创建实例对象
/*
config.properties中的内容为:
className=java.util.ArrayList
想问问上面创建实例对象的方式和
获取类的构造方法(Constructor)之后再创建实例对象有什么区别?
Constructor constructor = ArrayList.class.getConstructor();
Collection collections = (Collection)constructor.newInstance();
*/
复制代码
谢谢了!
作者:
李尧
时间:
2013-3-28 11:43
没区别吧,反射就是用来写框架的.
作者:
张豪杰
时间:
2013-3-28 11:52
区别不大-。-
实际上
Properties props = new Properties();
props.load(ips);
ips.close();
这段代码只是在加载配置文件,也就是说,你要从config.properties中获取到你要用的信息,也就是className
这样你就知道配置文件中你需要加载的类名了
接下来就是通过类名获取字节码,然后是创建实例对象了。
需要注意的是:Collection collections = (Collection)Class.forName(className).newInstance();//这里是使用Class类里面的newInstance方法,调用没有参数的构造函数直接创建实例对象。
Constructor constructor = ArrayList.class.getConstructor();
Collection collections = (Collection)constructor.newInstance();
而这两句是先通过构造器获取构造函数,然后在用Constructor里面的方法创建实例对象。
第一种方式实际上是简化了操作,但是他只能获取没有参数的构造函数。如果要反射的类中没有空参数的构造函数,是不能使用Class里面的newInstance()方法的。
作者:
小路飞
时间:
2013-3-28 14:32
张豪杰 发表于 2013-3-28 11:52
区别不大-。-
实际上
Properties props = new Properties();
原来如此啊,谢谢仁兄!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2