我看到了有关一个不相关问题的一些代码,但它使我感到好奇,因为我从未见过Java
Generics这样的构造。创建可以将自身或自身后代用作类型参数的泛型类的用途是什么。这是示例:
abstract class A<E extends A<E>> {
abstract void foo(E x);
}
首先想到的是一个以列表为参数的列表。使用此代码感到很奇怪,如何声明A类型的变量?递归声明!
这还行吗?如果是这样,您在代码中看到过吗?如何使用?
编辑
确实,事实证明我的问题与这个问题相同,只是用不同的措词,但是该问题的答案也将回答我的问题。
也感谢您对“
反复出现的模板模式”的参考,该模板提供了一些历史背景和对该主题的进一步说明。
这个老博客条目可能会为我为我们的Java专家提供最好的全面解释。
现在很难在这里选择正确的答案,因为它们都对您有帮助,因此我将选择最终获得最多阅读材料的答案(上文参考)
泛型不仅用于列表之类的容器。这种“扩展自身”类型的参数用于让超类在方法参数和返回类型之类的地方引用子类,即使在编译超类时没有实际的特定子类可用。它类似于C++中反复出现的模板模式。
您的示例的子类将声明为
class Foo extends A<Foo>
html" target="_blank">继承的foo()
方法变成
void foo(Foo x)
看看如何A
定义一个Foo
即使实际上并不了解参数也可以接受参数的方法Foo
?
是的,这种事情很罕见,但并非闻所未闻:内置的Enum类使用了类似的技巧。
我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误:
我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类
问题内容: 我尝试用泛型创建一个抽象类。业务逻辑是将文本从一种语言翻译成另一种语言。每种语言都必须有一个课程。对于每种语言,我还需要一个类,该类是方法的返回对象,它具有参数。T应该是(例如EnglishText,ChineseText等)的子类。那就是我奋斗的地方。您如何编码此约束? 我创建了以下超级类。 如果我误解了泛型的概念或将其错误地使用,请说明一下。谢谢。 问题答案: 只需将其添加到定义泛
问题内容: 问题摘要: 我想将具有类型参数(例如)的类作为类型参数传递给泛型方法。 假设我有一个方法: 当然,此方法对于任何类型的类都可以正常使用。我可以这样调用该方法,例如: 问题: 我发现我不能这样做: 从句法上讲,这显然是无效的。但是,我不确定如何实现这样的目标。我当然可以通过,但是泛型类型的添加使其在语法上不再有效,并且我想不出解决方法。 唯一的直接解决方案是这样的事情(看起来很愚蠢):
问题内容: 以下这部分代码是什么意思?我什至不知道这个语法叫什么。 这是原始代码(可从此处找到:http : //developer.android.com/guide/components/processes-and- threads.html ): 问题答案: 告诉AsyncTask使用3种不同的类型进行描述,当您使用AsyncTask时,将String作为第一个参数,将Void作为第二个参数