1. Se os parâmetros de tipo forem irrestritos, substitua todos os parâmetros de tipo no tipo genérico por seus limites ou objetos.
Portanto, o bytecode gerado inclui apenas classes, interfaces e métodos comuns.
2. Insira conversões de tipo quando necessário para manter a segurança do tipo.
3. Para manter o polimorfismo em tipos genéricos estendidos, gere métodos de ponte.
Exemplo
Lista<String> lista1 = new ArrayList<String>(); List<Integer> list2 = new ArrayList<Integer>(); System.out.println(list1.getClass() == list2.getClass()); //imprime verdadeiro
O texto acima é a aplicação do apagamento do tipo java, espero que seja útil para todos.