我有一组继承自某个基本实体的类。这组类中的某些类也可以相互继承,形成嵌套层次结构。
我的目标是让所有的类都能够访问一个创建自身新实例的方法。我希望在我的基本实体中实现此方法,以便所有继承类都可以继承它。
以下是定义为我的模式的三个示例类:
BaseEntity.java
public abstract class BaseEntity<E extends BaseEntity> {
Class<E> clazz;
public BaseEntity(Class<E> clazz) {
this.clazz = clazz;
}
public E getNewInstance() throws IllegalAccessException, InstantiationException {
return clazz.newInstance();
}
}
Collection.java
public class Collection<E extends Collection> extends BaseEntity<E> {
public Collection() {
super(Collection.class);
// compiler error: BaseEntity (java.lang.Class<E>) in BaseEntity cannot be applied to
// (java.lang.Class<Collection>)
}
public Collection(Class<E> clazz) {
super(clazz);
}
}
Document.java
public class Document extends Collection<Document> {
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
的默认构造函数存在编译错误。我不确定造成这种情况的原因,我认为这也导致了示例主方法中的编译错误。我做错了什么,如何解决?
请注意,这是一个虚构的示例,涉及我正在尝试解决的更大问题。我明白这个实现看起来有些愚蠢。