代码对比
✕ Java 7/8
Map<String, List<String>> map =
new HashMap<String, List<String>>();
// anonymous class: no diamond
Predicate<String> p =
new Predicate<String>() {
public boolean test(String s) {..}
};
✓ Java 9+
Map<String, List<String>> map =
new HashMap<>();
// Java 9: diamond with anonymous classes
Predicate<String> p =
new Predicate<>() {
public boolean test(String s) {..}
};
发现此代码有问题? 告诉我们。
为什么现代方式更好
一致的规则
菱形运算符无处不在——构造函数和匿名类均适用。
减少冗余
类型参数在左侧声明一次,不再重复。
DRY 原则
编译器已经知道类型——为什么要写两遍?
旧方式
重复类型参数
现代方式
菱形运算符 <>
自 JDK
9
难度
入门
JDK 支持
匿名类的菱形运算符
可用
匿名类的菱形运算符自 JDK 9 起可用(2017 年 9 月)。
工作原理
Java 7 引入了 <> 但不适用于匿名内部类。Java 9 解除了这一限制,使菱形运算符可以在任何地方使用。
相关文档