Comprendiendo la eliminación de tipos en genéricos
Java utiliza la eliminación de tipos en los genéricos para garantizar que no se necesite ningún costo adicional en tiempo de ejecución. El compilador reemplaza el parámetro de tipo con la clase Object o la clase padre (en el caso de genéricos con límite) durante el proceso de eliminación de tipos. En el siguiente bloque de código, veremos cómo los genéricos funcionan con tipos primitivos en tiempo de compilación y tiempo de ejecución.
// ~/project/Main.java
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> integerList = new ArrayList<Integer>();
integerList.add(1);
integerList.add(2);
integerList.add(3);
int sum = 0;
for (int i = 0; i < integerList.size(); i++) {
sum += integerList.get(i);
}
System.out.println(sum);
}
}
Para ejecutar el código, abra la terminal y navegue hasta el directorio ~/project. Compile el código con el siguiente comando:
javac Main.java
Después de una compilación exitosa, ejecute el código con el siguiente comando:
java Main
La salida del código será:
6
En el bloque de código anterior, intentamos agregar los elementos de la integerList. Como sabemos, los tipos primitivos como int no se pueden usar con genéricos. Debido a la eliminación de tipos, el parámetro de tipo Integer se reemplaza con la clase Object en tiempo de compilación. Sin embargo, el autoboxing y el unboxing nos permitieron realizar la adición de enteros en tiempo de compilación. En tiempo de ejecución, el código se ejecutó como un código normal, sin ningún costo adicional.