一、通过反射操作对象
Class对象可以获得该类里包括的方法(由Method对象表示)、构造器(由Constructor对象表示)、Field(由Field对象表示),这三个类都定义在java.lang.reflect包下,并实现了java.lang.reflect.Member接口,程序可以通过Method对象来执行对应的方法,通过Constructor对象来调用对应的构造器创建对象,能通过Field对象直接访问并修改对象的属性值。
二、创建对象
通过反射来生成对象有如下两种方式:
1、 使用Class对象的newInstance()方法来创建该Class对象的实例,而执行newInstance()方法时实际上是利用默认构造器来创建该类的实例。
2、 先使用Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建该Class对象实例。即通过指定构造器来创建实例。
package Demo18;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
importorg.eclipse.jdt.internal.compiler.ast.ThisReference;
public class ObjectPoolFactory {
privateMap<String,Object> objectPool = new HashMap<String,Object>();
privateObject createObject(String className)
throwsClassNotFoundException, InstantiationException,
IllegalAccessException{
Classclazz = Class.forName(className);
returnclazz.newInstance();
}
publicvoid initPool(String fileName) throws ClassNotFoundException,
InstantiationException,IllegalAccessException {
FileInputStreamfis = null;
try{
fis= new FileInputStream(fileName);
Propertiesprops = new Properties();
props.load(fis);
for(String name : props.stringPropertyNames()) {
objectPool
.put(name,this.createObject(props.getProperty(name)));
}
}catch (IOException e) {
System.out.println("读取" +fileName + "异常");
}finally {
try{
if(fis != null) {
fis.close();
}
}catch (IOException e2) {
e2.printStackTrace();
}
}
}
publicObject getObject(String name){
returnobjectPool.get(name);
}
publicstatic void main(String[] args)
throwsClassNotFoundException, InstantiationException, IllegalAccessException
{
ObjectPoolFactorypf = new ObjectPoolFactory();
pf.initPool("E:/obj.txt");
System.out.println(pf.getObject("a"));
}
}