<分区>
两边casting有什么区别:
List <String>myNumbers = new ArrayList<String>();
对比:
List <String>myNumbers = new ArrayList();
和:
List myNumbers = new ArrayList<String>();
<分区>
两边casting有什么区别:
List <String>myNumbers = new ArrayList<String>();
对比:
List <String>myNumbers = new ArrayList();
和:
List myNumbers = new ArrayList<String>();
最佳答案
第一个示例是类型安全的,意思是如果您尝试添加除 String
以外的任何内容对象进入 myNumbers
list 然后你会得到一个编译器错误。
List <String> myNumbers = new ArrayList<String>();
第二个例子也是类型安全的,编译器将确保只有 String
类型的对象存储在 myNumbers
列表。
List <String> myNumbers = new ArrayList();
A raw type is the name of a generic class or interface without any type arguments.
在 JDK 1.5 中引入泛型时,保留原始类型只是为了向后兼容旧版本的 java。尽管仍然允许使用原始类型,但您应该避免使用它们,原因如下:
最后一个示例是原始类型,这意味着我们可以将所有类型的对象添加到 myNumbers
中列出,但是,您应该尽可能避免使用它们。
List myNumbers = new ArrayList<String>();
注意 - 如果不指定类型,如上所示,myNumbers
内的每一项列表被视为类型 Object
.
根据您展示的示例,这是首选方式:
List <String> myNumbers = new ArrayList<String>();
但是,您可以将调用泛型类的构造函数所需的类型参数替换为一组空的类型参数 ( <
>
),只要编译器可以从上下文中推断类型参数。
意思不是这个:
List <String> myNumbers = new ArrayList<String>();
我们可以这样做:
List <String> myNumbers = new ArrayList<>();
关于java - 在 ArrayList 上的何处指定类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566460/