package RevisandoCap7;
import java.util.ArrayList;
import java.util.Collection;
public class LongWordFinder {
public static void main(String [] args){
String[] array = {"123","12345678","1","12","1234567890"};
java.util.List<String> list = java.util.Arrays.asList(array);
java.util.Collection<String> resultList = getLongWords(list); // vai dar erro aqui
}
public static <E extends CharSequence> Collection<? extends CharSequence> getLongWords(Collection<E> coll)
{
Collection<E> longWords = new ArrayList<E>();
for(E word : coll)
if(word.length() > 6 ) longWords.add(word);
return longWords;
}
}
o código acima NÃO compila
na linha q provoca o erro (que é o cabeçalho do método getLongWords).
se eutrocar por:
aí vai compilar …
mas pq??
na linha com erro eu falei que o retorno ia ser <? extends CharSequence> e deu erro
na linha sem erro eu falei que o retorno ia ser (sendo que E foi declarado no método com sendo extends CharSequence ) e NÃO DÀ ERRO
Por que?? eu pensei que as duas declarações fossem equivalentes
public static <E extends CharSequence> Collection<E> getLongWords(Collection<E> coll)
Significa:
Seja E é uma subclasse de CharSequence, este método retorna uma Collection<E> e recebe uma Collection<E>. O E do parâmetro e do retorno são os mesmos.
public static <E extends CharSequence> Collection<? extends CharSequence> getLongWords(Collection<E> coll)
Significa:
Seja E é uma subclasse de CharSequence, este método retorna uma Collection<alguma coisa qualquer que se sabe ser um CharSequence> e recebe uma Collection<E>. O E do parâmetro e o generic do retorno podem não ser a mesma coisa.
Isso é semelhante a:public static <E extends Animal> Collection<? extends Animal> foo(Collection<E> c) {
return new ArrayList<Gato>();
}Observe que aqui, o generic do retorno não tem relação com o generic do parâmetro. Como resultado, ao invocar este método passando um Collection<Cachorro> o compilador vai ver que “algum Animal” pode não ser a mesma coisa que “Cachorro”, e neste exemplo, não é mesmo, é o retorno é um Collection<Gato>.