Sobes.tech
Middle+

O que é a eliminação de tipos em Java?

sobes.tech IA

Resposta da IA

A eliminação de tipos (type erasure) é um processo em Java em que a informação sobre os tipos é eliminada na fase de compilação, e o bytecode compilado não contém informações sobre os parâmetros genéricos.

Pontos-chave:

  • Compatibilidade: Permite que os genéricos funcionem com código mais antigo que não usa genéricos.
  • Implementação: O compilador substitui os tipos parametrizados pela sua limite superior (geralmente Object) e insere as conversões de tipos necessárias.
  • Limitações:
    • Não é possível usar tipos primitivos como parâmetros genéricos (por exemplo, List<int>).
    • Não é possível criar um array de um tipo parametrizado (por exemplo, new List<String>[10]).
    • Não é possível usar o operador instanceof para verificar um tipo parametrizado (por exemplo, if (list instanceof List<String>)).
    • Não é possível sobrecarregar métodos por tipos parametrizados se suas assinaturas eliminadas coincidirem.

Exemplo:

// Código fonte com genéricos
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Não requer conversão explícita

// Bytecode após eliminação de tipos
List list = new ArrayList(); // Tipo List<String> substituído por List
list.add("hello");
String s = (String)list.get(0); // Conversão implícita inserida

Apesar das limitações, a eliminação de tipos é um aspecto chave na implementação de genéricos em Java, garantindo compatibilidade retroativa.