gpt4 book ai didi

java - 在泛型中接受自身作为类型参数有什么用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:51 26 4
gpt4 key购买 nike

我在一个不相关的问题上看到了一些代码,但它让我很好奇,因为我从未见过这样的 Java 泛型结构。创建一个可以作为类型参数本身或其后代的泛型类有什么用。这是示例:

abstract class A<E extends A<E>> {
abstract void foo(E x);
}

首先想到的是一个以列表为参数的列表。使用这段代码感觉很奇怪,你如何声明一个类型为 A 的变量?递归声明!?

这真的有用吗?如果是这样,你们中有人在代码中看到了吗?它是如何使用的?


编辑

事实证明我的问题与this one 相同只是措辞不同,但该问题的答案也会回答我的问题。

同时感谢您引用 Curiously Recurring Template Pattern其中给出了一些历史背景和对该主题的进一步解释。

这个老blog entry可能给出了我为我们 Java 人员找到的最好的全面解释。

现在很难在这里选择一个正确的答案,因为它们都很有帮助,所以我会选择最终产生最多阅读 Material 的那个(引用上面)

最佳答案

如果没有这个,方法 foo 的参数就不能绑定(bind)到 E 类型。

如果你有这个抽象类的实现 B,你现在可以强制执行该方法 foo 还要求它的参数是 B.

 class B extends A<B> {
void foo (B x){}
}

如果没有它,foo 将不得不采用任何 类型的A

我同意这个语法不够优雅。

关于java - 在泛型中接受自身作为类型参数有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2542297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com