【发布时间】:2011-03-25 02:59:22
【问题描述】:
如何删除:
类型安全:类型的表达 List[] 需要未经检查的转换才能符合
List<Object>[]
以下表达式中的编译器警告:
List<Object>[] arrayOfList = new List[10];
【问题讨论】:
如何删除:
类型安全:类型的表达 List[] 需要未经检查的转换才能符合
List<Object>[]
以下表达式中的编译器警告:
List<Object>[] arrayOfList = new List[10];
【问题讨论】:
Afaik 唯一的方法是使用@SuppressWarnings("unchecked")。至少如果您想避免 Matthew 的回答中出现的原始类型警告。
但您应该重新考虑您的设计。列表数组?这真的有必要吗?为什么不是列表列表?如果它变得太复杂(List of List of List to ...),请使用自定义数据类型。这确实使代码更具可读性。
作为一个无关的旁注:你应该写List<Object>[] arrayOfList。括号是类型的一部分,而不是变量。
【讨论】:
如果没有编译器警告,您不能对此进行任何变体。泛型和数组表现不佳。虽然你可以用
压制它@SuppressWarnings("unchecked")
final List<Object> arrayOfList[] = new List[10];
【讨论】:
List arrayOfList[] = new List[10];
或
List[] arrayOfList = new List[10];
Java 中不能有泛型数组,因此没有理由引用一个。它不是类型安全的,因此会发出警告。当然,您使用的是<Object>,这意味着您的列表旨在包含任何对象。但是无法拥有泛型数组仍然适用。
另外,请注意上面的第二个版本(带有 [] 附加到类型)在 Java 中通常被认为是更好的样式。它们在语义上是等价的。
【讨论】:
有很多方法:
List[] arrayOfList = new List[10]; 请注意,在 Java 中,您通常在声明类型时将 [] 放在类型而不是变量之后 - 尽管 Sun 不鼓励使用原始类型,因为它们可能会在未来的版本中被删除。List<List<Object>> listOfList = new ArrayList<List<Object>>;
【讨论】:
不幸的是,由于泛型是在 Java 中使用 type erasure 实现的,因此您无法创建具有类型参数的类型数组:
// This will give you a compiler error
List<Object>[] arrayOfList = new ArrayList<Object>[10];
有关详细说明,请参阅 Angelika Langer 的 Java 泛型常见问题解答中的 this。
您可以删除泛型并使用原始类型,如 Matthew Flaschen 所示,或者使用集合类而不是数组:
List<List<Object>> data = new ArrayList<List<Object>>();
【讨论】: