Tipo apagamento
O que é apagamento de tipo?
Os parâmetros de tipo existem apenas no momento da compilação.No tempo de execução, a máquina virtual Java não sabe sobre a existência de genéricos.
Exemplos:
import java.util.ArrayList;
public class ErasedTypeTest {
public static void main(String[] args) {
Class c1 = new ArrayList<String>().getClass();
Class c2 = new ArrayList<Integer>().getClass();
System.out.println(c1 == c2);//true,这里并不知道类ArrayList<String>和ArrayList<Integer>,只知道ArrayList
}
}
Efeitos do apagamento do tipo:
Referência:
https://segmentfault.com/a/1190000020382440
https://segmentfault.com/a/1190000005179142
- Tipos genéricos não podem ser usados como sobrecargas de método
public void testMethod(List<Integer> array) {}
public void testMethod(List<Double> array) {} // compile error
- Tipos genéricos não podem ser usados como tipos reais
static <T> void genericMethod(T t) {
T newInstance = new T(); // compile errror
Class c = T.class; // compile errror
List<T> list = new ArrayList<T>(); // compile errror
if (list instance List<Integer>) {} // compile errror
}