0

我过去一直在使用向量,并且对它们非常熟悉。我听说 ArrayList 更快、更灵活。我是使用ArrayListsJava Generics的新手。我目前正在按如下方式使用它们并收到有关参数化的警告(我以为我是通过声明它们来做到的<String>

ArrayList<String> arrayList = new ArrayList <String> ();
...
//then within a method
arrayList.add(file.getName()); //<-This line triggers the warning.

我在网上发现可以通过抑制方法中的警告来避免这种情况,如下所示。但是,这是一种变通方法,我宁愿学习数组列表如何工作并正确使用它们,而不是抑制错误使用它们的警告。

@SuppressWarnings("unchecked")

如果有关于使用 ArrayLists 的某种约定或标准,我也很想了解这些。

编辑: 我收到的警告如下:类型安全:方法 add(Object) 属于原始类型 ArrayList。应该参数化对泛型类型 ArrayList 的引用

4

4 回答 4

5

首先,通过接口名称引用您的列表(作为变量、返回类型或参数类型),因此:

List<String> list = new ArrayList<String>();

将代码绑定到特定实现是一种不好的形式。

向量本身并没有错。它们基本上是所有方法都同步的 ArrayList。这可能会产生不必要的开销,但不会过度。

至于抑制未经检查的警告,只有在您引用没有通用参数的 List 时才需要这样做。例如:

List list = new ArrayList<String>();
list.add("boo");

因此,每当您将 List 用作返回类型、变量类型或参数类型时,请始终包含适当的泛型类型。

某些库可能不会为您提供该选项,但这些应该是您需要禁止未经检查的警告的唯一情况。

于 2009-12-24T05:54:11.407 回答
3

也许您正在将 传递arrayList给方法签名void method(ArrayList arrayList)或更好的方法void method(List arrayList),并且编译器会触发未经检查的警告。您应该将方法签名更改为void method(ArrayList<String> arrayList)或更好void method(List<String> list)

于 2009-12-24T06:08:51.600 回答
1

警告是什么?对我来说这似乎很好,尽管您应该真正对其接口 List 进行编码。

于 2009-12-24T05:55:49.420 回答
0

您提到警告来自以下行:

arrayList.add(file.getName());

如果 file.getName() 返回“String”以外的任何值,那么您将收到编译错误,如果“file.getName()”返回“String”,则不会有任何警告。

于 2009-12-24T06:09:41.037 回答