В чем разница между List<? extends MyClass>
и List<MyClass>
. Не оба ли означают, что у меня есть список с объектами MyClass
?Разница между списком <? extends MyClass> и список <MyClass>
ответ
Есть разница. A List<? extends MyClass>
может относиться к List<MySubClass>
, который отличается от List<MyClass>
. Кроме того, List<MySubClass>
не является List<MyClass>
, поскольку Java-дженерики не являются ковариантными.
Поскольку компилятор не знает , который подклассом на самом деле является, он не позволяет вам звонить add
, чтобы сохранить безопасность типа.
List<? extends MyClass>
, принятый в методе, дает вам список, который не может иметь вещей, добавленных для безопасности типа, но на самом деле может быть прочитан довольно хорошо. Поскольку мы не знаем, какой из подклассов MyClass
список на самом деле, мы добавим MyClass
. Обратите внимание, что X extends Y
не означает Foo<X> extends Foo<Y>
из-за отсутствия ковариации.
Для List<MyClass>
вы можете хорошо читать и писать.
@Thilo Мне пришлось бы делать эксперименты для нулевого случая, когда у меня есть время. – hexafraction
«О, это снова?» Возможно, вы могли бы помочь искать/голосовать, чтобы закрыть как дубликат. –
GenericClass<? extends T> g
позволяет использовать общий возвращение типа для метода в GenericClass
:
T item = g.get(0)
GenericClass<? super T> g
позволяет использовать общий аргумент типа для метода в GenericClass
:
T item;
g.set(0, item)
GenericClass? 'get' и' set' определены в 'List'. Как они будут работать для «GenericClass», полностью подходит для захватов. – Thilo
- 1. Разница между списком <T> и Список <? extends T>
- 2. Разница между списком <? extends A> и список <A>
- 3. разница между списком и списком <?>
- 4. Разница между <extends Comparable> и <extends Comparable < T >>?
- 5. Разница между генериками <T extends Number & Comparable <T>> и T extends Comparable <? extends Number>
- 6. В чем разница между <? extends Object> и <E extends Object>?
- 7. Разница между <% и <% =
- 8. разница между <%: и <% =
- 9. Список <? extends Base> VS List <Base>
- 10. Разница между <- и << -
- 11. В чем разница между списком <Something> и списком <? расширяет что-то>?
- 12. Список <? extends MyType>
- 13. В чем разница между списком Java <String> и списком <String> []
- 14. Различия между `копия (список <? super T> Dest, Список <? extends T> ЦСИ)` и `копирования (Список <T> Dest, Список <? extends T> ЦСИ)`
- 15. Разница между списком <Observer*> * и список <Observer*> in C++
- 16. разница между списком <T> и список <T> = новый список <T> в C#
- 17. разница между << s.str() и << s.rdbuf()
- 18. SBT, разница между << = и: =
- 19. Разница между/* <! [CDATA [*/и // <! [CDATA [
- 20. разница Solr между '<' и <
- 21. разница между <%= %> и <%: %>
- 22. Разница между + и << в рубине
- 23. разница между <% и <% = ruby
- 24. Рельсы: разница между <% = и <% ==?
- 25. В чем разница между << и + =?
- 26. Разница между <? Php и <?
- 27. Разница между <? PHP и <? Php
- 28. Есть ли разница между новым списком <T>() и новым списком <T> (0)
- 29. Разница между списком <Integer> и списком <? super Integer>
- 30. Java Generics: Есть ли разница между списком <E> и списком <?>?
Вы увидите одно отличие, если попытаетесь добавить объект 'MyClass' в' List extends MyClass> 'и' List ':) –
Pshemo