今天在实现一个对象池的时候遇到一个问题,我的想法是对象池的实现不会约束池对象构造函数的参数个数,这样就可以让使用者更加方便的设计自己的池对象,但是问题是,对象池如何根据池对象的构造函数参数列表来确定应该传几个参数,难点就是如何在创建一个对象之前,如何让程序自动识别要创建对象需要的参数个数。
------解决方案--------------------
不知道你要的是不是这样
Book:
private String name;
private String author;
private Integer number;
private Float length;
private Float width;
private Boolean isBorrowed;
public Book(String name, String author, Integer number, Float length,
Float width, Boolean isBorrowed) {
this.name = name;
this.author = author;
this.number = number;
this.length = length;
this.width = width;
this.isBorrowed = isBorrowed;
}
比如要生成一个Book的对象
ObjectPool的getObject()的方法:
/**
* @param classType 要生成的Class对象
* @param obj 生成对象所要带的参数
*/
public Object getObject(Class classType, Object[] obj){
// ……
// 判断池中是否已存在挂起的对象
// ……
// 如果池中没有挂起的对象,则需要新建对象
Class[] clazzs = new Class[obj.length];
for(int i = 0; i < obj.length; i++){
clazzs[i] = obj[i].getClass();
}
Constructor cons = classType.getConstructor(clazzs);
return cons.newInstance(obj);
}
使用:
Book book = (Book)ObjectPool.getObject(Book.class, new Object[]{"helloworld", "smith", 123, 23.5f, 18.0f, true});