これは禁止されていますが、その理由を指摘させてください。
考えてみましょう:
FavoritesList<Person> l = new FavoritesList<Contact>();
FavoritesList<Person>
許可されているが禁止されている操作、つまり の契約を破るFavoritesList<Contact>
サブクラスの追加があります。Person
FavoritesList<Contact>
あなたが探しているものは次のとおりです。
FavoritesList<? extends Person> wildcardedList = new FavoritesList<Contact>();
つまり、これは特定されていない type のリストであり?
、このリスト内のすべての要素はこの typeであり、この型が person を拡張?
していることがわかります。?
このタイプのワイルドカードは、最初は直感的ではない可能性があることに注意してください。基本的に、彼らがあなたに与えるのは、このリストの読み取り専用ビューです。
仮定しましょう:
class FavoritesList<T>{
void add(T t){...}
}
基本的にあなたは呼び出すことができません:
wildcardedList.add(new Contact());
または:
wildcardedList.add(new Contact());
Person
orContact
が指定されていない型 T であるかどうかがわからないためです。
そのためには、パラメーターのタイプにワイルドカードを追加する必要がadd
あり、それは面倒です。