可能重复:
Double brace initialisation (anonymous inner class) with diamond operator
使用Java 7,为什么以下是一个问题
final List<String> a = new ArrayList<>() {
{
add("word");
}
};
需要显式类型声明,如
final List<String> a = new ArrayList<String>() {
{
add("word");
}
};
答案 0 :(得分:4)
恕我直言,一般来说,Java避免了类型推断。
在任何情况下,<>
仅在编译器不需要知道使用哪种泛型类型时才有效。对于匿名类,需要提供实际类型,因为编译器不会推断类型。
有效<>
关闭类型检查,而不是提供类型推断。匿名类存储实际的泛型类型,因此您必须提供它。
List<String> a = new ArrayList<>()
非常像
@SuppressWarnings("unchecked")
List<String> a = new ArrayList()
但是对于匿名子类,编译器需要为它提供泛型类型。
答案 1 :(得分:2)
由于某些技术性原因,不支持使用Diamond for anonymous类