6

型推論のOracleのドキュメントから

型推論は、各メソッド呼び出しと対応する宣言を調べて、呼び出しを適用可能にする型引数 (または複数の引数) を決定する Java コンパイラの機能です。推論アルゴリズムは、引数の型を決定し、可能な場合は、結果が割り当てられる、または返される型を決定します。最後に、推論アルゴリズムは、すべての引数で機能する最も具体的な型を見つけようとします。

この最後の点を説明するために、次の例では、pick メソッドに渡される 2 番目の引数が Serializable 型であることが推論によって判断されます。

static <T> T pick(T a1, T a2) { return a2; }
Serializable s = pick("d", new ArrayList<String>());

アルゴリズムが最も具体的なタイプを見つけようとするのはなぜですか?

4

1 に答える 1

5

このルールが適用されない場合、代入の互換性により呼び出しがあいまいになるためです。

たとえば、PrintStreamが定義print(Object)print(String)、最も具体的なタイプのルールが強制されていない場合、直観に反するprint( ) の代わりにprint("bar")呼び出すことができます。print(Object)String

型の選択はコンパイル時の型に基づいていることに注意してください。したがって、次の例print(Object)では が呼び出されます。

PrintStream out = ...;
Object bar = "bar";
out.print(bar);
out.print((Object)"foo");
于 2013-02-26T07:13:37.717 に答える