Método genérico de llamada Java
Saltar al contenidoLos genéricos en java fueron introducidos como una de las características en JDK 5. Personalmente, encuentro los corchetes angulares “<>” utilizados en los genéricos muy fascinantes y siempre me obliga a tener otro pensamiento donde lo uso O lo veo escrito en el código de otra persona. Para ser franco, he estado usando genéricos desde hace mucho tiempo, pero todavía no me siento totalmente confiado para usarlo a ciegas. En este tutorial, voy a cubrir todo lo que encuentro útil con los genéricos de java, y cosas relacionadas con ellos. Si crees que puedo utilizar palabras más precisas en alguna parte del tutorial, o se puede añadir un ejemplo o simplemente no estás de acuerdo conmigo; déjame un comentario. Estaré encantado de conocer tu punto de vista.Tabla de contenidos
Cuando escriba el código anterior y lo compile, obtendrá el siguiente error: “El método add(Integer) en el tipo List<Integer> no es aplicable para los argumentos (String)”. El compilador le advierte. La segunda parte es obtener el código de bytes después de eliminar la segunda línea del ejemplo anterior. Si se compara el código de bytes del ejemplo anterior con/sin genéricos, no habrá ninguna diferencia. Claramente el compilador ha eliminado toda la información de los genéricos. Por lo tanto, el código anterior es muy similar al código de abajo sin genéricos.
Ejemplo de clase genérica Java
Estaba buscando una manera de hacer esto yo mismo sin añadir una dependencia extra al classpath. Después de algunas investigaciones encontré que es posible siempre y cuando tengas un supertipo genérico. Esto estaba bien para mí, ya que estaba trabajando con una capa DAO con un supertipo de capa genérica. Si esto se ajusta a tu escenario entonces es el enfoque más limpio IMHO.
Mi proyecto estaba usando Spring, que es incluso mejor, ya que Spring tiene un método útil para encontrar el tipo. Este es el mejor enfoque para mí, ya que se ve más limpio. Supongo que si no estuvieras usando Spring podrías escribir tu propio método de utilidad.
He encontrado una forma genérica y sencilla de hacerlo. En mi clase he creado un método que devuelve el tipo genérico según su posición en la definición de la clase. Supongamos una definición de clase como esta:
El método readFile lee un archivo .csv especificado por el fileName con fullpath. Puede haber archivos csv con diferentes contenidos, por lo que necesito pasar la clase del archivo modelo para que pueda obtener los objetos apropiados. Como se trata de la lectura de archivos csv que quería hacer de una manera genérica. Por alguna razón u otra ninguna de las soluciones anteriores me ha funcionado. Necesito usar
Genéricos en java
Los genéricos son una facilidad de programación genérica que se añadió al lenguaje de programación Java en 2004 dentro de la versión J2SE 5.0. Fueron diseñadas para extender el sistema de tipos de Java para permitir que “un tipo o método opere sobre objetos de varios tipos mientras se proporciona seguridad de tipos en tiempo de compilación”[1] El aspecto seguridad de tipos en tiempo de compilación no se logró completamente, ya que se demostró en 2016 que no está garantizado en todos los casos[2].
En 1998, Gilad Bracha, Martin Odersky, David Stoutamire y Philip Wadler crearon Generic Java, una extensión del lenguaje Java para soportar tipos genéricos[3].
El siguiente bloque de código Java ilustra un problema que existe cuando no se utilizan genéricos. En primer lugar, declara un ArrayList de tipo Object. A continuación, añade un String a la ArrayList. Por último, intenta recuperar la cadena añadida y convertirla en un entero, lo cual es un error lógico, ya que generalmente no es posible convertir una cadena arbitraria en un entero.
Constructor de clase genérica Java
Este tutorial es esencial para los principiantes en el lenguaje de programación Java que quieran aprender los genéricos. En Java, los genéricos tienen varias ventajas que hacen que su uso sea significativo. Las clases genéricas se ejecutan más rápido que las clases no genéricas ya que han reducido los códigos boilerplate (código innecesario). Además, los métodos genéricos permiten la reutilización del código, lo que ahorra al programador la creación de varios métodos.
Un tipo de referencia con uno o más parámetros de tipo se conoce como tipo genérico. Cuando se especifica el tipo genérico, estos parámetros de tipo se sustituyen por argumentos de tipo. Las clases y métodos genéricos permiten tipos parametrizados que incluyen las clases envolventes.
Por ejemplo, cuando se quiere crear una clase que muestre la clase del tipo parametrizado ya sea Enteros, Dobles, Cadenas, o incluso Caracteres, se verá obligado a crear diferentes clases mientras que con los genéricos sólo habrá una clase.
T se utiliza normalmente para representar el tipo que debe ser el tipo parametrizado Integer, String, Float, Double, o Character. Los tipos primitivos como int, char, float, double y string no deben ser utilizados para representar T.