私は最近 Core Java を読み始めました。しかし、ワイルドカードの概念を理解するのに苦労しています。
具体的には、次の違いについて混乱しています。
public class A<T extends {some_class}> {/*...*/}
と
public class A<? extends {some_class}> {/*...*/}
違いがある場合、誰でも違いを理解するのを手伝ってもらえますか?
違いは、 は使用できますが、 は他の?
場所では使用できないことT
です。例えば:
public class Foo<T extends Number> {
T value; // you can declare fields of type T here
int foo() {
// Since you said T extends Number, you can call methods of Number on value
return value.intValue();
}
}
では、なぜあなた?
はまったく使うのでしょうか?タイプが必要ない場合。私が考えることができる方法でクラス定義で使用するのは意味がありません。ただし、次のようなメソッドで使用できます。
int getListSize(List<?> list) {
return list.size();
}
クラス全体に関心があり、パラメータ化された型を含まないメソッドがあるメソッドは、ここで機能します。 Class.getName()
は別の例です。