在我的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。我不知道为什么会发生这种情况。任何人都可以告诉我需要做什么才能将其传递给抽象基类而不受伤害?
编辑: 我想我已经解决了它,秘诀似乎是,我必须声明parent参数中的每个子类中,以便有更具体的参考吧,像这样:
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);
//...
}
}
似乎不太可能对我。请展示一个简短但完整的示例来说明问题。 –