我有一个属于 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
扩展并执行上述自引用泛型时,这才起作用。