Quais são as diferenças entre List
, List<?>
, List<T>
, List<E>
, e List<Object>
?
1. Lista
List
: é um tipo bruto, portanto não typesafe
. Isso gerará apenas um erro de tempo de execução quando a transmissão estiver ruim. Queremos um erro de tempo de compilação quando o elenco é ruim. Não recomendado para uso.
2. Lista <?>
List<?>
é um curinga ilimitado. Mas não sei ao certo para que serve? Posso imprimir um List<?>
sem problemas:
public static void test(List<?> list){
System.out.println(list); // Works
}
Por que não consigo adicionar itens a um List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Lista <T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Eu não entendo essa sintaxe. Eu vi algo assim, e funciona:
public <T> T[] toArray(T[] a){
return a;
}
Às vezes, eu vejo <T>
, ou <E>
, ou <U>
, <T,E>
. Eles são todos iguais ou representam algo diferente?
4. Liste <Objeto>
Isso fornece o erro "O método test(List<Object>)
não é aplicável ao argumento List<String>
":
public static void test(List<Object> list){
System.out.println(list);
}
Se eu tentar isso, obtive "Não é possível transmitir de List<String>
para List<Object>
":
test((List<Object>) names);
Estou confuso. String
é uma subclasse de Object
, então por que não é List<String>
uma subclasse de List<Object>
?
2
. Eu escrevo alguns códigos para demonstrar isso2
. tyvm