我过去一直在使用矢量,我对它们非常熟悉。我听说ArrayLists更快更灵活。我不熟悉使用ArrayLists和Java Generics。我目前正在使用它们如下并接收有关参数化的警告(我认为我通过声明它们<String>
进行了警告。
ArrayList<String> arrayList = new ArrayList <String> ();
...
//then within a method
arrayList.add(file.getName()); //<-This line triggers the warning.
我在网上发现,可以通过抑制方法中的警告来避免这种情况,如下所示。但是,这是一个解决方法,我宁愿了解arraylists如何正常工作和使用它们,而不是禁止警告错误地使用它们。
@SuppressWarnings("unchecked")
并且,如果有关于使用ArrayLists的某种惯例或标准,我也很想了解这些。
编辑:我收到的警告如下:类型安全:方法add(Object)属于原始类型ArrayList。对泛型类型ArrayList的引用应该参数化
答案 0 :(得分:5)
首先,通过接口名称引用您的列表(作为变量,返回类型或参数类型),这样:
List<String> list = new ArrayList<String>();
将代码绑定到特定实现是不好的形式。
Vector没有任何内在错误。它们基本上是ArrayLists,其中所有方法都是同步的。这可能会产生不必要的开销,但不会过度。
至于抑制未经检查的警告,只有在你引用没有泛型参数的List时才需要这样做。例如:
List list = new ArrayList<String>();
list.add("boo");
每当使用List作为返回类型,变量类型或参数类型时,总是包含适当的泛型类型。
某些库可能不会为您提供该选项,但这些应该是您需要禁止未经检查的警告的唯一情况。
答案 1 :(得分:3)
也许您正在将arrayList
传递给方法签名为void method(ArrayList arrayList)
或更好void method(List arrayList)
的方法,并且编译器会触发未经检查的警告。您应该将方法签名更改为void method(ArrayList<String> arrayList)
或更好void method(List<String> list)
答案 2 :(得分:1)
警告是什么?虽然你应该真的编写它的接口List,但对我来说似乎很好。
答案 3 :(得分:0)
您提到警告来自以下行:
arrayList.add(file.getName());
arrayList.add(file.getName());
如果file.getName()返回除“String”以外的任何值,那么您将遇到编译错误,如果“file.getName()”返回“String”,则不会有任何警告。