我在一个不相关的问题上看到了一些代码,但这让我很好奇,因为我从未见过 Java 泛型的这种构造。创建一个可以将其本身或其后代作为类型参数的泛型类有什么用处。这是示例:
abstract class A<E extends A<E>> {
abstract void foo(E x);
}
我首先想到的是一个以列表为参数的列表。使用这段代码感觉很奇怪,如何声明 A 类型的变量?递归声明!?
这还管用吗?如果是这样,你们有人在代码中看到过吗?它是如何使用的?
EDIT
事实证明我的问题确实是一样的this one https://stackoverflow.com/questions/211143/java-enum-definition只是措辞不同,但该问题的答案也将回答我的问题。
也感谢您的参考奇怪的重复模板模式 http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern其中提供了一些历史背景和有关该主题的进一步解释。
这个老博客条目 http://madbean.com/2004/mb2004-3/可能为我们 Java 人员提供了最好的全面解释。
现在很难在这里选择正确的答案,因为它们都很有帮助,所以我会选择最终产生最多阅读材料的答案(如上所述)
如果没有这个,方法的参数foo
无法绑定到类型E
.
如果你有一个实现B
对于这个抽象类,您现在可以强制执行该方法foo
还要求其参数的类型B
.
class B extends A<B> {
void foo (B x){}
}
如果没有那个,foo
必须采取any有点儿A
.
我同意这个语法不太优雅。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)