3

我一直在阅读Java 教程,并且一直在阅读 JDK7 中的泛型类型推断

我遇到了以下语法...

class MyClass<X> {
    <T> MyClass(T t) {
        // ...
    }
}

MyClass<Integer> myObject = new <String`> MyClass<>("");

...这有点令人困惑。我了解“钻石”运算符以及如何根据上下文推断泛型类型。

我不确定您为什么要使用菱形运算符来推断传递给构造函数的类型,同时还明确指定类型“String`”?我也不明白为什么涉及反引号!

另外,以下有区别吗?

MyClass<Integer> myObject1 = new <String> MyClass<>(""); // JDK7 only
MyClass<Integer> myObject2 = new MyClass<>(""); // JDK7 only
MyClass<Integer> myObject3 = new <String> MyClass<Integer>("");
4

1 回答 1

2
MyClass<Integer> myObject = new <String> MyClass<>("");

只是

MyClass<Integer> myObject = new <String> MyClass<Integer>("");

也就是说,您是 1. 创建 MyClass<Integer> 的实例 2. 使用 String 作为类型参数调用构造函数:

<String> MyClass(String t) {
    // ...
}

菱形运算符与构造函数无关,因为它不会“推断传递给构造函数的类型”,而是推断传递给整个类的类型。

哦,我认为教程示例中的反引号可能是印刷错误。:)

于 2011-06-01T10:36:28.767 回答