我有一个属于 class 类型的 class 成员,例如一个链表:

class MyLinkedList {
    ...
    public MyLinkedList next;
    ...
}

当我上这节课时
class MyExtendedLinkedList extends MyLinkedList{
    ...
    public doStuff(){
    ...
    }
}

我不能做这样的事情
MyExtendedLinkedList myExLL = ...//Get some somewhere
myExLL.next.doStuff();

由于next不返回MyExtendedLinkedList的实例。显然,这可以通过类型转换来完成,但是有没有一种声明next的编译时类型安全方法,以便可以获取所有派生类的派生类型?

最佳答案

class MyLinkedList<T extends MyLinkedList<T>> {
  public T next;
}

class MyExtendedLinkedList extends MyLinkedList<MyExtendedLinkedList> {
  ...
}

但是请注意,您不能扩展MyExtendedLinkedList并具有此技巧。仅当您直接从MyLinkedList扩展并执行上述自引用泛型时,这才起作用。

09-08 06:40