在我的GWT应用程序中,我有一个数据类型(用于构建和跟踪类似对象的层次结构),它扩展了一个超类,后者又扩展了另一个抽象超类。在抽象类中声明了一个泛型参数,然后由每个子类指定为自身的类型。结构如下:
public abstract class AbstractFoo<T extends AbstractFoo> {
protected T parent;
protected AbstractFoo(T parent){
if (parent != null) parent.addChild(this);
this.parent = parent;
}
//...
}
public class Foo<T extends Foo> extends AbstractFoo<T> {
public Foo(T parent){
super(parent);
//...
}
}
public class SpecialFoo<T extends SpecialFoo> extends Foo<T> {
public SpecialFoo(T parent){
super(parent);
//...
}
}
当我将父参数传递给SpecialFoo的构造函数时,Foo的构造函数将被调用为超构造函数,该构造函数将依次调用AbstractFoo的构造函数作为超构造函数。
我遇到的问题是,当从Foo传递给AbstractFoo时,父参数会重置为NULL。我不知道为什么会这样。任何人都可以告诉我我需要做什么才能将它传递给抽象基类而不受伤害?
修改 我想我已经解决了......诀窍似乎是我必须在每个子类中声明父参数,以便有更具体的引用,如下所示:
public abstract class AbstractFoo<T extends AbstractFoo> {
protected T parent;
protected AbstractFoo(T parent){
if (parent != null) parent.addChild(this);
this.parent = parent;
}
//...
}
public class Foo<T extends Foo> extends AbstractFoo<T> {
protected T parent;
public Foo(T parent){
super(parent);
//...
}
}
public class SpecialFoo<T extends SpecialFoo> extends Foo<T> {
private SpecialFoo parent;
public SpecialFoo(T parent){
super(parent);
//...
}
}
答案 0 :(得分:0)
回顾这些要点:
null
参数(打印); 答案 1 :(得分:0)
您是否检查过您的父母是非 null
您是否给了您的SpecialFoo构造函数?