Los Java Generic Methods son métodos genéricos de Java que no pertenecen a una clase concreta . Esto en un primer momento nos puede resultar chocante pero a veces ocurre. Recordemos que la forma de construir clases genéricas es :
package com.arquitecturajava; import java.util.ArrayList; import java.util.List; public class Bolsa<T> { private List<T> lista= new ArrayList<T>(); public void add(T item) { lista.add(item); } }
El método add es un método genérico ya que se apoya en el tipo T que la clase define.
Java Generic Methods
Sin embargo cuando nos referimos a métodos genéricos estamos hablando de métodos que son genéricos sin pertenecer a una clase genérica. Esto puede parecer raro en un primer momento , lo veremos más claro en código:
package com.arquitecturajava; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class PrincipalGenericMethod { public static void main (String args[]) { Collection<String> lista= new ArrayList<String>(Arrays.asList("A","B","C")); Collection<String> nueva= duplicarColleccion(lista); nueva.forEach(x->System.out.println(x)); } public static <T> Collection<T> duplicarColleccion(Collection<T> coleccion) { coleccion.addAll(coleccion); return coleccion; } }
En este caso el método duplicarColleccion se encarga de volver a copiar los mismos elementos en la colección para tenerlos duplicados. Es un método genérico ya que admite cualquier tipo de colección cambiando el tipo T. Pero ademas no pertenece a ninguna clase en concreto ya que el tipo T se declara de forma explicita en el método. Para entenderlo de forma más sencilla es como si la declaración <T >de la clase parara al propio método.
Es un código que cuesta entender ya que parece que tiene dos parámetros de retorno genéricos y no solo uno. En primer lugar <T> y en segundo lugar Collection<T>. Los Java Generic Methods aportan una mayor flexibilidad a nuestra programación
Otros artículos relacionados:
Actualmente estos aprendiendo Java y el tema de los genérico junto con reflection me trae de cabeza.
En mi humilde opinión, los genericos java cojean con el tema del “erasure”.¿Alguna versión futura se quitará este lastre?
¿El que haya una función genérica, mas bien diria globales, no va en contra de la POO?
Es el precio que uno tiene que pagar por mantener la compatibilidad con la JVM , es aquí donde lenguajes tipo C# al ser posteriores aportan más ventajas.
La verdad es que toda la tecnología construida sobre la JVM me encanta y algunas de las APIs de Java son una maravilla. Antes era un firme defensor de Java, pero tras un año entero trabajando en C# tengo que decir que cuando vuelvo a Java echo de menos muchísimas cosas que simplemente me hacen la vida más fácil. Siguiendo un poco las teorías de Paul Graham al que empezé a leer hace poco, especialmente “CINCO CUESTIONES ACERCA DEL DISEÑO DE LENGUAJES”, me he dado cuenta de que en C# he creado un poco mi propia sintaxis, basada en métodos… Read more »
.NET y Java son desde mi punto de vista las dos grandes plataformas ,quizás Java tenga la ventaja de estar muy asentado como lenguaje multiplataforma y C# tenga la ventaja de tener soluciones muy integradas en la plataforma Windows .