两边铸造有什么区别:
List <String>myNumbers = new ArrayList<String>();相对于:
List <String>myNumbers = new ArrayList();以及:
List myNumbers = new ArrayList<String>();发布于 2017-04-23 01:48:48
第一个例子是类型安全,这意味着如果您试图将String对象以外的任何内容添加到myNumbers列表中,那么您将得到一个编译器错误。
List <String> myNumbers = new ArrayList<String>();第二个例子也是类型安全的,编译器将确保只将String类型的对象存储在myNumbers列表中。
List <String> myNumbers = new ArrayList();原始类型
原始类型是没有任何类型参数的泛型类或接口的名称。
在JDK1.5中引入泛型时,只保留原始类型,以便与旧版本的java向后兼容。虽然仍然允许使用原始类型,但您应该避免使用它们,原因如下:
最后一个示例是原始类型,这意味着我们可以将所有类型的对象添加到myNumbers列表中,但是,您应该尽可能地避免它们。
List myNumbers = new ArrayList<String>();备注--如果您不指定类型,如上面所示,myNumbers列表中的每一项都被视为类型Object。
在哪里指定ArrayList上的类型参数?
从您展示的示例来看,这是首选的方法:
List <String> myNumbers = new ArrayList<String>();但是,只要编译器能够从上下文中推断类型参数,就可以用空的类型参数集(< >)替换调用泛型类的构造函数所需的类型参数。
意思不是这个意思:
List <String> myNumbers = new ArrayList<String>();我们可以这样做:
List <String> myNumbers = new ArrayList<>();https://stackoverflow.com/questions/43566460
复制相似问题