我的一个朋友在Java API中找到了这个小问题(https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html),
Class Enum<E extends Enum<E>>
Run Code Online (Sandbox Code Playgroud)
并阅读以下文章https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html我可以理解上述行在语法上的含义,但从给出的例子中我无法弄清楚用例这超出了Enum类(查看来源).
我想更多地了解上述可能存在解决方案的问题.
例如,允许子类使用自己的类型很有用
想象一下这样的课程
class Node {
Node next;
}
Run Code Online (Sandbox Code Playgroud)
如果你扩展那个课程,你就会坚持下去Node
.
class SpecialNode extends Node {
void foo() {
// euwww
SpecialNode nextNode = (SpecialNode) this.next;
}
}
Run Code Online (Sandbox Code Playgroud)
你也不能像它一样定义它
class Node<T> {
T next;
}
Run Code Online (Sandbox Code Playgroud)
因为这样就可以了T
.你真的想要一个T
是extends Node
或可以不再使用T作为Node
从内Node
而无需进行转换.但它适用于儿童班.
通过使用递归边界
class Node<T extends Node<T>> {
T next;
}
Run Code Online (Sandbox Code Playgroud)
您将T限制为自己或您自己的子类,然后允许您这样做
class SpecialNode extends Node<SpecialNode> {
void foo() {
SpecialNode nextNode = this.next; // type-safe!
}
}
Run Code Online (Sandbox Code Playgroud)
这样,父类和子类都可以在其抽象级别上访问完全类型安全的所有内容.
归档时间: |
|
查看次数: |
230 次 |
最近记录: |