正确使用Arraylist和Java泛型与向量

正确使用Arraylist和Java泛型与向量,java,standards,arraylist,warnings,conventions,Java,Standards,Arraylist,Warnings,Conventions,我过去一直在使用向量,对它们非常熟悉。我听说ArrayList更快、更灵活。我不熟悉使用和使用。我目前正在按如下方式使用它们,并收到一条关于参数化的警告(我认为我是通过声明它们来实现的) 请注意,如果在使用ArrayList方面有一些惯例或标准,我也想了解一下 编辑:我收到的警告如下:类型安全:方法add(Object)属于原始类型ArrayList。对泛型类型ArrayList的引用应参数化首先,通过接口名称引用列表(作为变量、返回类型或参数类型),以便: List<String>

我过去一直在使用向量,对它们非常熟悉。我听说ArrayList更快、更灵活。我不熟悉使用和使用。我目前正在按如下方式使用它们,并收到一条关于参数化的警告(我认为我是通过声明它们来实现的)

请注意,如果在使用ArrayList方面有一些惯例或标准,我也想了解一下


编辑:我收到的警告如下:类型安全:方法add(Object)属于原始类型ArrayList。对泛型类型ArrayList的引用应参数化首先,通过接口名称引用列表(作为变量、返回类型或参数类型),以便:

List<String> list = new ArrayList<String>();
List List=new ArrayList();
将代码绑定到特定的实现是一种糟糕的形式

向量本身并没有什么问题。它们基本上是所有方法都同步的ArrayList。这可能会产生不必要的开销,但不会太大

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

List list = new ArrayList<String>();
list.add("boo");
List List=new ArrayList();
列表。添加(“boo”);
因此,当您将列表用作返回类型、变量类型或参数类型时,请始终包含适当的泛型类型


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

警告是什么?虽然您确实应该对其接口列表进行编码,但我认为这很好。

也许您正在将
arrayList
传递给方法签名为的方法e> void方法(ArrayList ArrayList)或更好的
void方法(List ArrayList)
和编译器触发未检查的警告。您应该将方法签名更改为
void方法(ArrayList ArrayList)
或更好的
void方法(List List List)
您提到警告来自以下行:


如果file.getName()返回的是除“String”以外的任何值,则会出现编译错误,如果“file.getName()”返回的是“String”,则不会出现任何警告。

能否显示整个方法(或至少是声明)发出警告的地方。我正在做一个研究项目,所以我不想显示任何专有代码。我知道这会让事情变得更困难:(如果您使用字符串s=file.getName();arrayList.add);您还会收到错误吗?您使用的是哪个版本的JDK?我已经多次尝试过了(现在您已经建议了)它并没有删除警告。听起来好像file.getName()以某种方式返回了一个对象。文件的实例化是什么类的?如果添加您收到了相同的错误消息?我需要查看更完整的代码片段来告诉您为什么会收到该警告。您传递的对象不是泛型类型,或者您使用的是裸泛型类型(即“列表列表”而不是“列表列表”)。我想您的意思是:“您应该将方法签名更改为
方法(ArrayList ArrayList)
“在任何情况下,正如其他人所说,您真正应该将其更改为
方法(列表)
您的意思是
无效方法(ArrayList ArrayList)
,或者更好的
无效方法(列表strs)
(似乎答案中包含泛型参数,但语法突出显示被解释为HTML或以其他方式忽略。使用
backticks
编辑答案)然后我能想到的唯一可能性是变量“arrayList”的增量您的方法中的声明与此处显示的声明不同。是否有可能在方法中使用相同名称对变量进行不同的声明,而这会掩盖您显示的声明。
List<String> list = new ArrayList<String>();
List list = new ArrayList<String>();
list.add("boo");
arrayList.add(file.getName());