在Java中,我具有以下类结构:
所有类
+-A类扩展全部
+-B级扩展全部
类ContainAll
+-类ContainA扩展了ContainAll
+-类ContainB扩展了ContainAll
在每个“包含”类中,都有一个链表和一个方法
public addElement(All a) {
list.add(a)
}
类ContainAll不应被实例化,但类ContainA和ContainB可以。
我如何使用泛型弄清楚类ContainB中的addElement只能从类型B获取对象,因此对于示例:
public abstract class ContainAll<T extends All> {}
public class ContainB<T extends B> extends ContainAll<All> {
public addElement(T b) {
list.add(b);
}
}
但是这个例子不起作用,我尝试了。
谢谢阅读。
最佳答案
使您的ContainAll
类抽象(因为您的要求之一是不能实例化它)并使其实现.addElement()
:
public abstract class ContainAll<T extends All>
{
private final List<T> list = new LinkedList<T>();
// ...
// FINAL! Subclasses cannot override it
public final void addElement(final T element)
{
list.add(element);
}
}
然后将
ContainA
实现为ContainAll<A>
等。.addElement()
将“自动”运行。