ワイルド カード パラメータを理解するのに本当に苦労しています。それに関していくつか質問があります。
?
型パラメーターとして、メソッドでのみ使用できます。例:型パラメータとしてprintAll(MyList<? extends Serializable>)
クラスを定義できません。?
の上限が分かりました
?
。printAll(MyList<? extends Serializable>)
意味:「インターフェイスを実装するオブジェクトがある場合は出力されprintAll
ますMyList
Serialzable
。 」
私はsuper
.printAll(MyList<? super MyClass>)
意味: "のオブジェクトまたは拡張するクラス(の子孫) がある場合にprintAll
表示されます。MyList
MyClass
MyClass
MyClass
"
私が間違っていたところを修正してください。
つまり、ジェネリック クラスを定義するための型パラメーターとしてT
or E
or K
or V
orのみを使用できます。メソッドでのみ使用できますN
?
更新 1:
public void printAll(MyList<? super MyClass>){
// code code code
}
Ivor Horton の本によれば、それが実装するインターフェイスまたはクラスのオブジェクトまたはいずれかがある場合、MyList<? super MyClass>
印刷できることを意味します。つまり、下限です。継承階層の最後のクラスです。これは、私の最初の仮定が間違っていたことを意味します。MyList
MyClass
MyClass
したがって、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
したがって、 は下限です。継承階層の最下位クラス