【发布时间】:2014-10-04 19:46:06
【问题描述】:
我想实现一个抽象的 Hierarchy 类。任何 Hierarchy 对象都应该有一个父对象(可以为 null)和一组子对象,它们的类型都与 Hierarchy 的具体实现完全相同。这可以用泛型来完成吗?如果不能,是否有任何机制来强制这种关系?
到目前为止,这是我的想法,但存在一些问题:
public abstract class Hierarchy<T extends Hierarchy<T>> {
private T parent;
private Set<T> children;
public T getRoot() {
if( parent == null ) {
return this;
} else {
return parent.getRoot();
}
}
}
问题在于return this。它给出了一个编译错误,因为this 的类型是Hierarchy,而不是T。我不能转换它,因为我实际上并不能保证this 的类型是T。以下声明可以编译得很好:
public class B extends Hierarchy<B> {...}
public class A extends Hierarchy<B> {...}
那么有什么方法可以禁止A extends Hierarchy<B> 声明?
【问题讨论】:
标签: java generics inheritance abstract-class