我有一个父类需要为某些方法存储对实例化子类的引用。为此,我在父类的构造函数中强制执行泛型。
public abstract class Parent<T> {
Class<T> clazz;
public Parent(Class<T> clazz) {
this.clazz = clazz;
}
}
在子类中,我使用相同的子类型一般强制扩展父类。
public class Child extends Parent<Child> {
public Child() {
super(Child.class);
}
}
对其他人来说这看起来很怪异吗?我觉得子类是如此冗余,因为我在泛型和构造函数中重用了相同的类型,它与调用类的类型相同。
答案 0 :(得分:-2)
虽然这对我来说看起来很奇怪,但它不会产生预期的影响,因为你在创建子类时没有要求父类,你只是扩展父对象。
要解决此问题,您应该将父级作为子类的参数。
像这样;
public class Parent{
//Put something here to keep track of the children
//You could use a HashMap, or an ArrayList
private ArrayList<Child> children = new ArrayList<Child>();
public void registerChild(Child child){
children.add(child);
}
}
public class Child {
public Child(Parent parent) {
parent.registerChild(this);
}
}