pessoal poderia me explicar como funciona este List:
List<? extends String>
como eu posso add neste List.
Obrigado.
pessoal poderia me explicar como funciona este List:
List<? extends String>
como eu posso add neste List.
Obrigado.
Esse é um list usando generics, dessa forma você está generalizando seu list e ele só poderá conter objetos String ou que extendão String.
mas para adicionar neste List<? extends String> não é da mesma forma que um List, que se add assim lista.add(“algumaCoisa”);
Interessante… colequei isso no meu Eclipse e não acusou erro, porem tem alguma coisa que extends String (já que ela é uma classe final) ? ou há alguma outra utilidade para esse tipo de artefato genérico ?
Você não pode adicionar nada a uma Lista que use <? extends> ou <?>. Você pode adicionar somente quando a assinatura do método for <? super AlgumaCoisa>
Tipo…
<? extends> - não pode adicionar. <?> - você pode passar qualquer tipo para o método, mas não pode adicionar. <? super> - pode adicionar. Acho q eh isso...Pois é, isso é muitoooooooooooo estranho hehehee, a primeira coisa que pensei, é isso não serve pra nada, já que você não pode extender a uma String.
Pois é, isso é muitoooooooooooo estranho hehehee, a primeira coisa que pensei, é isso não serve pra nada, já que você não pode extender a uma String.[/quote]
Pois então, foi o que eu ia responder…String é classe final.
Coisa perversa.
Não confunda
Significa uma Lista de Pessoa ou uma lista de uma classe que estenda Pessoa, por exemplo, PessoaFisica. Estamos falando do tipo da lista, não do objeto que está dentro. Por isso você não pode adicionar uma Pessoa à lista, já que a lista poderia ser de PessoaFisica, e a Pessoa em questão ser uma PessoaJuridica.
Um List<Pessoa> pode conter em seu interior tanto objetos da classe Pessoa quanto seus filhos. Sem a necessidade de wildcards. Os wildcards só fazem sentido quando você quer deixar mais amplo o tipo de lista recebida num parâmetro:
public void imprimir(List<? extends Pessoa> pessoas) {
for (Pessoa p : pessoas) {
System.out.println(p.getNome());
}
}
Esse método suporta como parâmetro um List<Pessoa> ou um List<PessoaFisica>.
String é final.
Mas voce pode fazer ? extends CharSequence que a lista aceitara tanto String como StringBuilder ou StringBuffer.