在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()将“自动”运行。

09-04 21:12