Java 如何获取对当前类实例的编译时引用
我有一个属于我的类的类成员,如链表:Java 如何获取对当前类实例的编译时引用,java,generics,Java,Generics,我有一个属于我的类的类成员,如链表: class MyLinkedList { ... public MyLinkedList next; ... } 当我扩展这门课的时候 class MyExtendedLinkedList extends MyLinkedList{ ... public doStuff(){ ... } } 我不能做这样的事 MyExtendedLinkedList myExLL = ...//Get some s
class MyLinkedList {
...
public MyLinkedList next;
...
}
当我扩展这门课的时候
class MyExtendedLinkedList extends MyLinkedList{
...
public doStuff(){
...
}
}
我不能做这样的事
MyExtendedLinkedList myExLL = ...//Get some somewhere
myExLL.next.doStuff();
因为next
不会返回MyExtendedLinkedList
的实例。显然,这可以通过类型转换来实现,但是是否有一种编译时类型安全的方法来声明next
,以便我可以为所有派生类获取派生类型?类MyLinkedList{
class MyLinkedList<T extends MyLinkedList<T>> {
public T next;
}
class MyExtendedLinkedList extends MyLinkedList<MyExtendedLinkedList> {
...
}
下一步是公共交通;
}
类MyExtendedLinkedList扩展了MyLinkedList{
...
}
但是请注意,您不能扩展
MyExtendedLinkedList
,而让这个技巧发挥作用;仅当您直接从MyLinkedList
扩展并执行上述自引用泛型时,此选项才有效。如果确实需要扩展MyExtendedLinkedList
,我如何调整此选项?您可能会放弃类型安全。说真的,这真的很难实现。@LouisWasserman我不明白会有什么困难。请您澄清一下好吗?除了“试试看”之外,解释起来有些棘手。如果Foo扩展了Bar
,那么subfo
或多或少受到Java类型系统的限制,仍然要扩展Bar
。但是这里有Foo扩展Bar
,所以subfo
必须扩展Bar
,而不能扩展Bar
。