1

ジェネリックのSunチュートリアルから

型推論

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

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

もともとは、最終的TString. 例ArrayList<ArrayList<String>>

しかし、その後、次のコードも問題なくコンパイルさ
Serializable s = pick("d", new ArrayList<Integer>());
れていることTがわかりましSerializableString

じゃあ発言の意味は

推論により、pick メソッドに渡される 2 番目の引数がString 型であると判断されます

4

1 に答える 1

2

この場合、 、 、 の 3 つのタイプがありSerializableます。StringArrayList<String>

  • Serializable何も拡張しません
  • String道具Serializableやその他の関係のないもの
  • ArrayList<String>道具Serializableやその他の関係のないもの

したがって、3 つすべてに適用される最も具体的なタイプは ですSerializable

たとえば、呼び出しを置き換えるとSerializable s = pick("d", new Object());、最も具体的な型が Object になり、Object を Serializable にキャストできないため、コンパイルされなくなります。

于 2012-08-15T11:13:01.250 に答える