什么时候需要为集合指定泛型类型?
When is specifying generic types for collections necessary?
以下代码行分别编译(当然是在不同的方法中):
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
List<String> list = new ArrayList();
其中一项是否比其他项更受鼓励?这些选项之间的行为有什么不同吗?
此声明形式适用于 Java 至版本 6
List<String> list = new ArrayList<String>();
此声明形式适用于 Java 版本 7+
List<String> list = new ArrayList<>();
最后对于这个版本,编译器会生成一个未经检查的转换警告,但它有效:
List<String> list = new ArrayList();
有关完整说明,请参阅此 link
<>
称为菱形运算符,它根据引用变量声明确定类型。
Recommended is using diamond operator
因为这避免了类型变量的样板或重复声明,因为它从变量声明中清晰可见,同时允许类型默认为 Object class 类型(如果未指定)。
除了 List<String> list = new ArrayList();
发出警告或根本不被视为良好做法外,以上三项均有效。
我的想法: List<String> list = new ArrayList();
从那个角度来看也可能是一个有效的声明,但它默认为对象类型的数组列表(这就是 Java是)。准确地说:
if you don't specify a type, it defaults to Object type
以下代码行分别编译(当然是在不同的方法中):
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
List<String> list = new ArrayList();
其中一项是否比其他项更受鼓励?这些选项之间的行为有什么不同吗?
此声明形式适用于 Java 至版本 6
List<String> list = new ArrayList<String>();
此声明形式适用于 Java 版本 7+
List<String> list = new ArrayList<>();
最后对于这个版本,编译器会生成一个未经检查的转换警告,但它有效:
List<String> list = new ArrayList();
有关完整说明,请参阅此 link
<>
称为菱形运算符,它根据引用变量声明确定类型。
Recommended is using diamond operator
因为这避免了类型变量的样板或重复声明,因为它从变量声明中清晰可见,同时允许类型默认为 Object class 类型(如果未指定)。
除了 List<String> list = new ArrayList();
发出警告或根本不被视为良好做法外,以上三项均有效。
我的想法: List<String> list = new ArrayList();
从那个角度来看也可能是一个有效的声明,但它默认为对象类型的数组列表(这就是 Java是)。准确地说:
if you don't specify a type, it defaults to Object type