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 に答える