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