2010-08-04 29 views
2

的名单如何去除:通用阵列

类型安全:类型的表达 列表[]需要选中转换为符合List<Object>[]

编译器警告有以下表现:

List<Object>[] arrayOfList = new List[10]; 

回答

2

据我所知的唯一方式是使用@SuppressWarnings("unchecked")。至少如果你想避免马修回答中出现的原始类型警告。

但是你应该重新考虑你的设计。一个列表数组?这真的有必要吗?为什么不列出清单?如果它变得太复杂(List of List of List of List),使用自定义数据类型。这确实使代码更具可读性。

作为一个无关的方面说明:你应该写List<Object>[] arrayOfList。括号是类型的一部分,而不是变量。

1
List arrayOfList[] = new List[10]; 

List[] arrayOfList = new List[10]; 

您不能在Java中使用泛型数组,因此没有理由对其进行引用。它不会是类型安全的,因此是警告。当然,您正在使用<Object>,这意味着您的列表旨在包含任何对象。但是无法使通用数组仍然适用。

另外,请注意,上面的第二个版本(与[]附加到该类型)在Java中通常被认为是更好的样式。它们在语义上是等效的。

1

有多种方式:

  1. 您可以添加`@SuppressWarnings分配之前(“未登记”)告诉编译器忽略警告
  2. 使用RAW类型List[] arrayOfList = new List[10];通知,在Java中在声明时,通常在类型后面加上[],而不是变量 - 尽管Sun会阻止使用原始类型,因为它们可能会在未来的版本中被删除。
  3. 不要使用数组,它通常是一个坏主意与阵列混合集合:List<List<Object>> listOfList = new ArrayList<List<Object>>;
1

如果没有编译器警告,您无法做任何变化。泛型和数组不会很好。虽然你可以用

@SuppressWarnings("unchecked") 
final List<Object> arrayOfList[] = new List[10]; 
0

不幸的是压制它,由于使用type erasure的事实,泛型在Java中实现,你不能与类型参数创建一个类型的数组:

// This will give you a compiler error 
List<Object>[] arrayOfList = new ArrayList<Object>[10]; 

this在Angelika Langer的Java Generics常见问题的详细解释。

您可以删除泛型和使用原始类型,马修·富兰琛表示,或使用的不是数组集合类:

List<List<Object>> data = new ArrayList<List<Object>>(); 
+1

-1。我的代码编译,因为我在这里实例化一个数组而不是一个列表。 – 2010-08-04 07:46:53

+0

好吧,你是对的。我的错。编辑anwer。但这里要理解的重要一点是,你不能创建一个参数化类型的数组。 – Jesper 2010-08-04 07:50:40