4

可能重复:
使用菱形运算符进行双括号初始化(匿名内部类)

使用Java 7,为什么会出现以下问题

final List<String> a = new ArrayList<>() {
    {
        add("word");
    }
};

需要显式类型声明,如

final List<String> a = new ArrayList<String>() {
    {
        add("word");
    }
};
4

1 回答 1

4

恕我直言,一般来说,Java 避免类型推断。

无论如何,<>只有当编译器不需要知道使用了哪种泛型类型时才有效。对于匿名类,需要提供实际类型,因为编译器不会推断类型。

有效地<>关闭类型检查,而不是提供类型推断。匿名类存储实际的泛型类型,因此您必须提供它。

List<String> a = new ArrayList<>()

很像

@SuppressWarnings("unchecked")
List<String> a = new ArrayList()

但是对于匿名子类,编译器需要给它一个泛型类型。

于 2012-10-12T15:44:24.043 回答