otrzymuję „Niezgodność typów: nie można przekonwertować z List<CherryCoke>
do List<Coke<?>>
”Czy "lista koksów wiśniowych" jest "listą koksów"?
Wygląda jak „listy koksu wiśni” nie jest „lista koksu”. Jest to sprzeczne z intuicją. Jak mogę utworzyć "xs" tak czy inaczej, jeśli musi to być List<Coke<?>>
i muszę mieć podklasę ?
class Taste { }
class Cherry extends Taste { }
abstract class Coke<T extends Taste> { }
class CherryCoke extends Coke<Cherry> { }
class x {
void drink() {
List<Coke<?>> xs = Arrays.asList(new CherryCoke());
}
}
Najbardziej przydatny skrót do zapamiętania jest to, [PECS] (http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs). 'Coke >' nie jest niczym szczególnym, więc nie można powiedzieć "lista koksów to lista wiśniowych coli", ale można użyć '? rozszerza Coke > '. Zobacz pytanie, które łączyłem, aby uzyskać więcej informacji. – Brian