¿Qué significa genérico en Java?
Los genéricos, o genéricos, son una extensión del sistema de tipos del lenguaje Java que admite la creación de clases que se pueden parametrizar por tipo. Puede considerar los parámetros de tipo como marcadores de posición para el tipo especificado cuando utiliza tipos parametrizados, del mismo modo que los parámetros formales de un método son marcadores de posición para los valores pasados en tiempo de ejecución.
La motivación para la generalización se puede ver en el marco de las colecciones. Por ejemplo, la clase Map le permite agregar objetos de cualquier clase a un Map, aunque el caso más común es contener objetos de un tipo específico (como String) en un Map determinado.
Dado que Map.get() está definido para devolver un Objeto, generalmente es necesario forzar que el resultado de Map.get() se convierta al tipo requerido, como se muestra en el siguiente código:
Mapa m = new HashMap();
m.put("key", "blarg");
String s = (String) m.get("key " );
Para que el programa se compile, debes forzar que el resultado de get() sea una cadena y esperar que el resultado realmente sea una cadena, pero también es posible que alguien haya guardó algo en ese mapa que no es un contenido de cadena, en cuyo caso el código anterior arrojará ClassCastException. De esta manera, elimina las conversiones en su código y, al mismo tiempo, obtiene una capa adicional de verificación de tipos para evitar que alguien guarde la clave o el tipo de valor incorrecto en la colección. Esto es lo que hacen los genéricos.
Ventajas de los genéricos
La introducción de genéricos en el lenguaje Java es una de las mejoras funcionales más importantes. Para admitir genéricos, no solo el lenguaje, el sistema de tipos y los compiladores sufrieron cambios importantes, sino que las bibliotecas de clases también sufrieron ajustes importantes, haciendo que muchas clases importantes (como el marco de la colección) sean genéricas.
Esto aporta muchos beneficios:
1. El objetivo principal de los genéricos es mejorar la seguridad de tipos de los programas Java. Al conocer las restricciones de tipo de las variables definidas mediante genéricos, el compilador puede verificar las suposiciones de tipo en un mayor grado. Sin genéricos, estas suposiciones sólo existirían en la mente del programador (o, si tienes suerte, en los comentarios del código).
2. Eliminar la conversión de tipo forzada. Un efecto secundario de los genéricos es la eliminación de muchas conversiones en el código fuente. Esto hará que el código sea más legible y reducirá la posibilidad de errores.
3. Potencial mejora del rendimiento. Los genéricos brindan la posibilidad de una optimización a mayor escala. En los primeros días de la implementación de genéricos, el compilador insertaría conversiones en el código de bytes generado (en ausencia de genéricos, el programador especificaría conversiones). Pero el hecho de que el compilador tenga acceso a más información de tipos abre la posibilidad de optimizaciones en futuras versiones de la JVM. Debido a la forma en que se implementan los genéricos, admitirlos casi no requiere cambios en la JVM o los archivos de clase. Todo el trabajo se realiza en el compilador, y el código generado por el compilador es similar al código que escribirías sin usar genéricos (y conversiones), solo que es más seguro para tipos.
Las ventajas de introducir genéricos en el lenguaje Java son la seguridad y la sencillez. El beneficio de los genéricos es que se verifica la seguridad de tipos en el momento de la compilación y todas las conversiones son automáticas e implícitas, lo que aumenta la reutilización del código.
También existen algunas reglas y restricciones para el uso de genéricos:
1. Los parámetros de tipo de los genéricos solo pueden ser tipos de clase (incluidas las clases personalizadas), no tipos simples.
2. El mismo tipo de genéricos puede corresponder a múltiples versiones (porque el tipo de parámetro es incierto) y diferentes versiones de instancias de clases genéricas son incompatibles.
3. Un genérico puede tener múltiples parámetros de tipo.
4. El tipo de parámetro de un tipo genérico puede usar la declaración extendida, como
5. El tipo de parámetro de un tipo genérico también puede ser un tipo comodín. Por ejemplo, Class > classType = Class.forName(Java.lang.String);
Los genéricos tienen interfaces, métodos, etc., y hay mucho contenido que requiere mucho esfuerzo. comprenderlos y aplicarlos con soltura. Aquí escribí dos ejemplos (escritos según la impresión que vi) para lograr la misma función. Uno usa genéricos y el otro no. A través de la comparación, podrá aprender rápidamente la aplicación de genéricos. Aprendalo. Los genéricos son el 70% del contenido.