如何获取当前类实例的编译时引用

时间:2017-05-05 18:20:25

标签: java generics

我有一个类成员,它是我的类的类型,如链表:

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

当我扩展这个课程时

class MyExtendedLinkedList extends MyLinkedList{
    ...
    public doStuff(){
    ...
    }
}

我不能做像

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

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

1 个答案:

答案 0 :(得分:3)

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

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

但请注意,您无法扩展MyExtendedLinkedList并且可以使用此技巧;这只适用于直接从MyLinkedList扩展并执行上述自引用泛型的方法。