我有一组扩展一些基本实体的类.此集合中的类也可以相互扩展,从而创建嵌套层次结构.
我的目标是让所有类都可以访问创建自己的新实例的方法.我想在我的基本实体中实现此方法,以便所有扩展类继承此方法.
以下是为我的模式定义的三个示例类:
BaseEntity.java
public abstract class BaseEntity {
Class clazz;
public BaseEntity(Class clazz) {
this.clazz = clazz;
}
public E getNewInstance() throws IllegalAccessException,InstantiationException {
return clazz.newInstance();
}
}
Collection.java
public class Collection extends BaseEntity {
public Collection() {
super(Collection.class);
// compiler error: BaseEntity (java.lang.Class) in BaseEntity cannot be applied to
// (java.lang.Class)
}
public Collection(Class clazz) {
super(clazz);
}
}
Document.java
public class Document extends Collection {
public Document() {
super(Document.class);
}
}
有了这个设置,我希望能够做到这样的事情:
Collection c = new Collection();
c = c.getNewInstance(); // compiler error
Document d = new Document();
d = d.getNewInstance();
Collection cd = new Document();
cd = cd.getNewInstance(); // compiler error
但请注意,Collection.java的默认构造函数中存在编译器错误.我不确定为什么会造成这种情况,我认为这也会导致示例main方法中的编译器错误.我做错了什么,如何解决这个问题?
请注意,这是一个人为的例子,涉及我正在努力解决的更大问题.我知道这个实现本身看起来很傻.