推断的泛型类型和JDK7中的反引号

时间:2011-06-01 10:03:58

标签: java generics type-inference java-7

我一直在完成Java Tutorial并且已经reading about generic type inference in 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>("");

1 个答案:

答案 0 :(得分:2)

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

只是

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

就是说,你是 1.创建MyClass&lt; Integer&gt;的实例 2.使用String作为类型参数调用构造函数:

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

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

哦,我认为tutorial example中的反击可能是一个排版错误。 :)