ワイルド カード パラメータを理解するのに本当に苦労しています。それに関していくつか質問があります。
?型パラメーターとして、メソッドでのみ使用できます。例:型パラメータとしてprintAll(MyList<? extends Serializable>)クラスを定義できません。?の上限が分かりました
?。printAll(MyList<? extends Serializable>)意味:「インターフェイスを実装するオブジェクトがある場合は出力されprintAllますMyListSerialzable。 」
私はsuper.printAll(MyList<? super MyClass>)意味: "のオブジェクトまたは拡張するクラス(の子孫) がある場合にprintAll表示されます。MyListMyClassMyClassMyClass"
私が間違っていたところを修正してください。
つまり、ジェネリック クラスを定義するための型パラメーターとしてTor Eor Kor Vorのみを使用できます。メソッドでのみ使用できますN?
更新 1:
public void printAll(MyList<? super MyClass>){
// code code code
}
Ivor Horton の本によれば、それが実装するインターフェイスまたはクラスのオブジェクトまたはいずれかがある場合、MyList<? super MyClass>印刷できることを意味します。つまり、下限です。継承階層の最後のクラスです。これは、私の最初の仮定が間違っていたことを意味します。MyListMyClassMyClass
したがって、MyClass次のように見える場合は次のようになります。
public class MyClass extends Thread implements ActionListener{
// whatever
}
次に、次のprintAll()場合に出力され
ます 1.MyClassリストに のオブジェクト
があります 2.ThreadまたはActionListenerのオブジェクトがありますList
更新 2:
したがって、質問に対する多くの回答を読んだ後、私の理解は次のとおりです。
? extends Tを拡張する任意のクラスをT意味します。したがって、 の子をT参照しています。したがって、T上限です。継承階層の最上位クラス? super Tのクラス/インターフェースをsuper意味Tします。したがって、 のすべての親をT参照しています。Tしたがって、 は下限です。継承階層の最下位クラス