我希望生成一些基类,其中包括如下内容
class Container<T extends Containee>
{
T containee;
public T getContents(){return containee;}
public void setContents(T contents){ containee = contents; containee.setContainer(this); }
}
class Containee<T extends Container>
{
T container;
public T getContainer(){return container;}
public void setContainer(T container){this.container = container;}
}
这里存在一个循环定义问题,我认为可以使用通配符来缓解
class Container<T extends Containee<?>>
class Containee<T extends Container<?>>
除了编译器提示containee.setContainer(this)
。我已经破解了几个临时解决方案,可以编译父类(super class),但没有任何解决方案适用于子类,例如
class Foo extends Container<Bar>
class Bar extends Containee<Foo>
泛型教程和常见问题解答似乎没有任何与此相关的明显内容。如何使用泛型来表达这种关系?
谢谢
最佳答案
也许是这样的:
abstract class Container<
THIS extends Container<THIS, T>,
T extends Containee<T, THIS>
> {
T containee;
protected abstract THIS getThis();
public T getContents() {
return containee;
}
public void setContents(T contents){
containee = contents;
containee.setContainer(getThis());
}
}
class Containee<
THIS extends Containee<THIS, T>,
T extends Container<T, THIS>
> {
T container;
public T getContainer() {
return container;
}
public void setContainer(T container) {
this.container = container;
}
}
(或者可能是泛型较少的东西。)
关于Java 泛型在两个类之间具有类型化容器/包含关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5246826/