Скажем, у меня есть следующий пример приложения, я использую Java 8.Java генериков с верхней границей
У меня следующий класс, который имеет дочерний класс:
public class GrantedAuthority { }
public class GrantedAuthoritySubClass extends GrantedAuthority { }
После класс, где хитрая часть бывает:
public class UserDetails {
Collection<? extends GrantedAuthority> authorities;
public Collection<? extends GrantedAuthority> getAuthorities(){
return authorities;
}
}
Мой главный метод:
public class Main {
public static void main(String[] args) {
UserDetails u = new UserDetails();
List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
list.add(new GrantedAuthoritySubClass());
u.getAuthorities().addAll(list);
}
}
Когда я запускаю это я получаю следующее сообщение об ошибке:
Error:(12, 35) java: incompatible types:
java.util.List<GrantedAuthority>
cannot be converted tojava.util.Collection<? extends capture#1 of ? extends GrantedAuthority>
Моя проблема в том, как я могу передать коллекцию GrantedAuthoritySubClass
объектов в коллекции, возвращаемой u.getAuthorities()
. Я не могу понять это, и есть много ошибок компиляции, связанных с различными способами, которые я пробовал.
, что смысл иметь подстановочные в вашем примере? посмотрите http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p?rq=1 – JEY
@JEY Это о весне -security 4.0.3 и UserDetails весом, подобным выше. Я просто хотел сделать вопрос проще, не упоминая об этом. – nilan59
just return Collection Я не вижу смысла иметь подстановочный знак. –
JEY