Collection<? super String>
, sprzeczne z intuicją, nie znaczy „zbiór, który zawiera obiekty typu String
lub jego supertypem”. Oznacza to, że "col
będzie zbiorem posiadającym określony rodzaj, który sam w sobie jest String
lub jego nadtypem" (taki jak Object
, Serializable
lub CharSequence
).
Najlepszym sposobem na myślenie o Collection<? super String>
jest to, że nie jest to typ, jak przyzwyczaiłeś się w Javie, ale wzór , przeciwko któremu określone typy są dopasowane.
Teraz jedyną rzeczą, którą można bezpiecznie dodać do dowolnej kolekcji, która pasuje do powyższego wzoru, jest String
lub jej podklasa (jeśli taka była). Wręcz przeciwnie do tego, czego byś się spodziewał, prawda? To Generics dla ciebie.
' super String> 'może tylko dodać String. 'Obiekt' nie może być łańcuchem. Spróbuj:' Object myObj = new String(); 'i powinno działać. – Maroun
Nie, wszystko, co ** rozszerza ** String. To znaczy *? którego super jest String *. – m0skit0
@ m0skit0 to miejsce, w którym się pomyliłem. Dzięki. – Rollerball