Подстановочные знаки и дженерики Java? супер Т а? расширяет T

при работе с подстановочными знаками, такими как установка / добавление универсального элемента в определенный контейнер, предлагается ли использовать что-то вроде этого?

void add(List<?  super T> someList,someitem){
    someList.add(someItem);
}

и при получении предмета предлагается использовать что-то вроде этого

 <T> void f1(List<? extends T> obj, T item) {
     obj.add(item);
}

Что за этим стоит? и когда я узнаю, следует ли мне это использовать?


person KyelJmD    schedule 06.09.2012    source источник
comment
comment
кроме того, вы можете вспомнить ключевой Producer Extends Consumer Super из Эффективная Java   -  person cat_minhv0    schedule 06.09.2012
comment
В чем должна быть разница между этими фрагментами? В первой я вижу опечатки.   -  person Paul Bellora    schedule 06.09.2012
comment
@PaulBellora Ой, я обновил его.   -  person KyelJmD    schedule 06.09.2012
comment
Как это точный дубликат?   -  person KyelJmD    schedule 06.09.2012


Ответы (1)


вам следует взглянуть на объяснение принципа PECS

Что такое PECS (Producer Extends Consumer Super)?

Короче говоря, когда вы хотите получить информацию от объекта, обязательно используйте extends с подстановочным знаком.

И когда вы хотите поместить информацию в объект, обязательно используйте super вместе с wild card

person user1676688    schedule 03.10.2012