次の 2 つのメソッド シグネチャの違いは何ですか。
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
次の 2 つのメソッド シグネチャの違いは何ですか。
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
最初のものでT
は、メソッド本体でアクセスできますが、2 番目のものではアクセスできません。それが役立つかどうかは、メソッドのジョブによって異なります。
最初の場合は、次のように使用できます。
Set<MyClass> set = thing.getMyList();
Set<MyDerivedClass> set = thing.getMyList();
Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();
Set<? extends MyDerivedClass> set = thing.getMyList();
第二に、あなたはより制限されています:
Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();
最初のものをどのように実装すると思いますか? 2 つ目は、クライアント コードにワイルドカードの使用を強制するため、不適切です。