我正在尝试创建一个泛型类型的数组。我收到错误消息:
Pair<String, String>[] pairs; // no error here
pairs = new Pair<String, String>[10]; // compile error here
void method (Pair<String, String>[] pairs) // no error here.
我很困惑。任何线索为什么会这样。
其背后的原因是,您不能创建通用或参数化类型的数组,而只能 创建可验证的 类型(即可以在运行时推断出的类型)。
尽管可以将此类数组类型 声明 为变量或方法参数。这有点不合逻辑,但这就是Java的样子。
Java泛型和集合在第6章中广泛讨论了此问题和相关问题。
问题内容: 因此,我正在开发这个通用的HashTable类,并且希望将其通用地用于任何数量的传入类型,并且我还想将内部存储数组初始化为LinkedList的数组(出于冲突目的),其中为确保类型安全,每个LinkedList都被预先指定为HashTable类中的泛型类型。我该怎么做?以下代码最能阐明我的意图,但当然不会编译。 问题答案: Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换
在有效Java(第2版)第25项的最后一段中说:
我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。
问题内容: 我最近开始学习JAVA泛型。一切都说得通,我现在有点理解。但是有一件事让我烦恼-您无法创建通用类型的数组。 我想实现诸如队列和堆栈之类的抽象数据类型,但是要使用某种通用类型作为存储在堆栈中的基础数据。我将如何解决?我确定我想念但那是什么? 提前致谢。 问题答案: 《有效的Java》,第5章,GENERICS,第25项:首选列表而不是数组 : 数组在两个重要方面不同于通用类型。首先,数组
问题内容: 我一直在研究具有不同类型的泛型类的数组。用一些示例代码来解释我的问题是最简单的: 现在,如果我尝试创建像这样的容器数组: 我得到错误: 协议“ MyProtocol”只能用作通用约束,因为它具有“自身”或相关的类型要求。 要解决这个问题,我可以使用: 但是现在在枚举时出现了另一个“问题” : 如您在上面的代码中看到的那样,在两种情况下,确定相同方法的类型后都会调用它。我的问题是: 是否
我有一个扩展a的类B。a存储一个Item的列表,B存储一个BItem的列表 在“a”中,我有一个使用[?extends AItem]的ArrayList。 我假设这意味着我可以将这个ArrayList用于扩展aItem的任何类型的对象。