自 Java7 以来,数组列表的显式规范是否被视为一种不好的做法?为什么这个版本不需要它?
List<String> foo = new Arraylist<String>(); // before
List<String> bar = new Arraylist<>(); // from Java7
仅仅是因为它是在列表中定义的吗?谢谢!
自 Java7 以来,数组列表的显式规范是否被视为一种不好的做法?
这不是“坏习惯”——它只是比它可能的更啰嗦。这两个语句具有完全相同的效果,因此从这个意义上说,较长的版本没有缺点。你绝对不需要到处“修复”你所有的旧代码——但是当你编辑现有代码或编写新代码时,你可以选择使用较短的形式。
为什么这个版本不需要它?
因为 Java 7 引入了“菱形操作符”(实际上根本不是操作符)以避免冗余地指定类型参数。从关于“通用实例创建的类型推断”的Oracle 文档:
只要编译器可以从上下文推断类型参数,您就可以用一组空类型参数 (<>) 替换调用泛型类的构造函数所需的类型参数。这对尖括号被非正式地称为菱形。
从语言的角度来看,这并不是 Java 7 中唯一的新特性 - 再次,请参阅文档了解详细信息。
新格式只是帮助您节省一些击键。所以在 Java 7 中,当你编写
List<String> bar = new Arraylist<>();
这被认为等于
List<String> foo = new Arraylist<String>();
使用菱形运算符时,编译器将自动从左侧推断类型。
我不认为这是一种不好的做法,它只是让程序员放松的一种方式..考虑一下
Map<List<String>,Map<String,Integer>> superMap = new HashMap<>();
同样应该写成
Map<List<String>,Map<String,Integer>> superMap = new HashMap<List<String>,Map<String,Integer>>();
在 Java 6 中,后面的泛型替换是多余的