Los genéricos son una forma de crear clases y métodos con seguridad de tipos que pueden operar en diferentes tipos de objetos para detectar errores de tipo en tiempo de compilación en lugar de en tiempo de ejecución.
Se introduce en la versión 5.2.
clase pública GenericClass{elemento T final privado; public GenericClass(T elemento) {this.item = elemento; } public T getItem() {devolver artículo; } }
privado estáticovoid printItem(T elemento) {System.out.println(item.toString()); }
Se utiliza para restringir o vincularse a ciertos tipos o sus subtipos.
Nos permitirá invocar métodos de clases o interfaces acotadas.
privado estáticodouble add(T numOne, T numTwo) {return numOne.doubleValue() + numTwo.doubleValue(); }
Es una característica que permite al compilador determinar automáticamente el tipo de método genérico o parámetro de constructor.
Listalista = nueva ArrayList<>();
Es un símbolo >
que se utiliza para representar un argumento de tipo desconocido.
private static void printItemsInList(List> lista) {para (elemento de objeto: lista) {System.out.println(item); } }
Se utiliza para especificar que el argumento de tipo debe ser un subtipo de una determinada clase o interfaz.
Se utiliza para acceder a los elementos.
printItemsInList(Lista extiende Número> lista) {para (Número número: lista) {System.out.println(número); } }
Se utiliza para especificar que el argumento de tipo debe ser un supertipo de una determinada clase o interfaz.
Se utiliza para modificar los elementos.
Lista super Número> números = new ArrayList<>();numbers.add(10);numbers.add(10.2);numbers.add(10.4f);System.out.println(numbers);
Tipo de seguridad
los tipos de datos se corrigen en tiempo de compilación en lugar de en tiempo de ejecución, lo que hace que el código sea más robusto y confiable.
Reutilización del código
escriba clases y métodos que puedan funcionar con múltiples tipos de datos, lo que puede ayudar a reducir la cantidad de código que necesita escribir.
Actuación
Mejore el rendimiento al reducir la necesidad de conversiones de tipos y evitar la sobrecarga de la verificación de tipos en tiempo de ejecución.
Tipo de borrado
es una característica clave que borra el código genérico en tiempo de ejecución, lo que puede limitar la utilidad de los genéricos en determinadas situaciones.
Soporte limitado para tipos primitivos.
Los genéricos en Java no admiten tipos primitivos, como int o double, directamente. En su lugar, debe utilizar sus clases contenedoras correspondientes, como Integer o Double. Esto puede ser menos eficiente que trabajar directamente con tipos primitivos.
Complejidad
puede agregar complejidad al código que utiliza jerarquías de tipos complejos y tipos comodín.