Tenho que adimitir que levei um certo tempo pra entender oque estava acontecendo!!! Baseado nisto, me veio a pergunta…
“Qual é o nivel das questões de Generics?”
Não caem coisas tão complicadas, mas você precisa saber o que é “? extends Bla” e “? super Bla” para responder uma ou duas questões.
T
thingol
Se você entender este código, vai responder à questão de generics com facilidade.
importjava.util.*;classTestWildcard{// Pode receber uma List<Number>, List<Integer>, List<Double> etc.publicstaticdoublesoma(List<?extendsNumber>lista){doubleret=0.0;for(Numbern:lista){ret+=n.doubleValue();}returnret;}// Como você deve saber, Object <- java.util.Date <- java.sql.DatepublicstaticList<?superjava.util.Date>getNumeros(){List<java.util.Date>ret=newArrayList<java.util.Date>();ret.add(newjava.util.Date());ret.add(newjava.sql.Date(newjava.util.Date().getTime()));returnret;}publicstaticvoidmain(String[]args){// ? extends algumacoisa é mais fácil de entender. List<Double>doubles=newArrayList<Double>();doubles.add(2.0);doubles.add(3.0);System.out.println(soma(doubles));List<Integer>integers=newArrayList<Integer>();integers.add(2);integers.add(3);System.out.println(soma(integers));// ? super algumacoisa é mais difícil.List<?superjava.sql.Date>numeros=getNumeros();// Não consigo pôr algo que seja menos específico que java.sql.Datenumeros.add(newjava.sql.Date(newjava.util.Date().getTime()));//numeros.add (new java.util.Date()); // erro de compilação// Não consigo retirar nada que seja mais específico que ObjectObjectobj=numeros.get(0);System.out.println(numeros);}}