正确使用Arraylist和Java Generics vs Vectors

sli*_*mbo 0 java standards warnings conventions arraylist

我过去一直在使用矢量,我对它们非常熟悉.我听说ArrayLists更快更灵活.我是使用ArrayListsJava Generics的新手.我目前正在使用它们如下并接收有关参数化的警告(我认为我通过声明它们来做到了这一点<String>.

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

我在网上发现,可以通过抑制方法中的警告来避免这种情况,如下所示.但是,这是一个解决方法,我宁愿了解arraylists如何正常工作和使用它们,而不是禁止警告错误地使用它们.

@SuppressWarnings("unchecked")
Run Code Online (Sandbox Code Playgroud)

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

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

cle*_*tus 5

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

List<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

将代码绑定到特定实现是不好的形式.

向量没有任何内在错误.它们基本上是ArrayLists,其中所有方法都是同步的.这可能会产生不必要的开销,但不会过度.

至于抑制未经检查的警告,只有在您引用没有泛型参数的List时才应该这样做.例如:

List list = new ArrayList<String>();
list.add("boo");
Run Code Online (Sandbox Code Playgroud)

因此,只要将List用作返回类型,变量类型或参数类型,就始终包含适当的泛型类型.

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