Generics

Olá pessoal,

alguém saberia explicar pq não compila ?

public class ListStuff { public static void main(String[] args) { List<int[]> l1 = Arrays.asList(new int[]{1, 2, 3}); // OK List<Object[]> l2 = Arrays.asList(new int[]{1, 2, 3}); // Compiler error } }

Tratando-se de Generics, os tipos genéricos tanto da referência quanto da instância devem ser iguais.

O que vc está tentando fazer na prática quando não compila, é isso:

List<int[]> l2 = new ArrayList<int[]>(); //isso é o que retorna do método Arrays.asList(new int[]{1, 2, 3}); List<Object[]> l3 = l2; //essa é a atribuição q vc está tentando fazer

Repare que ao usar “List<int[]> l1 = Arrays.asList(new int[]{1, 2, 3});” vc tem o tipo “List<int[]>” tanto na referência “l1” quanto na instância retornada pelo método. Que fazendo uma analogia com o exemplo q citei acima, seria isso:

List<int[]> l2 = new ArrayList<int[]>(); //isso é o que retorna do método Arrays.asList(new int[]{1, 2, 3}); List<int[]> l3 = l2; //atribuição válida pois tanto a instância quanto a referência possuem o tipo genérico <int[]>

Obrigado, entendi.