关于ArrayList和Generic Type

时间:2018-01-03 12:38:34

标签: java arraylist netbeans generic-type-argument

1。首先

之间有什么区别
ArrayList<Class> myList = new ArrayList<Class>();
ArrayList<Class> myList = new ArrayList<>();

2。第二:

如果我像这样声明myList:

ArrayList myList = new ArrayList<Integer>();

为什么这仍然有效:myList.add("A String!!");

使用此声明:

ArrayList<Integer> myList = new ArrayList<>();

2 个答案:

答案 0 :(得分:0)

关于您的第一个问题:

  

之间有什么区别
ArrayList<Class> myList = new ArrayList<Class>();
ArrayList<Class> myList = new ArrayList<>();

没有区别。在第二种情况下,让编译器通过type inference来决定类型。

关于第二个问题:

  

如果我像这样声明myList:

ArrayList myList = new ArrayList<Integer>();
     

为什么这仍然有效:myList.add("A String!!");

     

使用此声明:

ArrayList<Integer> myList = new ArrayList<>();

You are using a raw type in the first case。这有点像使用Object作为泛型类型,只是更糟糕。您放弃所有编译时类型检查,因此您的示例中将遇到Exception

答案 1 :(得分:0)

前两个没有区别。第二个是java 7中添加的第一个的简短版本(我认为)

在第二件事中,你声明了一个通用的java列表(声明并没有说它是整数列表)。然后你给该变量一个ArrayList的实例。这是你做的事情,并不在声明中。这就是代码编译的原因(你可以添加一个字符串,因为数组列表的实例可以是任何东西)。但它会在运行时失败,因为在当前运行中,实例是整数列表。

当你声明它是ArrayList myList时,它知道编译时该列表只能有整数并且编译失败。