Genéricos Java - Tensho97/Aprende-a-Aprender GitHub Wiki

¿Qué son?

Los genéricos en Java permiten asignar parámetros a las clases , interfaces, métodos...., de forma que sólo admitan los tipos de objetos que tu quieras.

Ejemplo:

List miLista = new ArrayList( );
miLista.add(“Hola”);
miLista.add(“Galaxia”);
miLista.add(new Integer(2001));

Y podemos hacer casting para obtener los elementos de la lista y compilará sin problemas.

String s = (String) miLista.get(0);
String st = (String) miLista.get(1);
String str = (String) miLista.get(2);

Pero dará error en tiempo de ejecución ya que el caso tres no es un String sino un Integer. Como dijimos antes, los genéricos permite asignar parámetros, entonces si hacemos la lista utilizando genéricos :

List <String> miLista = new ArrayList <>();
//al poner <String> estamos indicando que la lista sólo acepta Strings
miLista.add(“Hola”); //un String, perfecto
miLista.add(“Galaxia”); //otro String, muy bien
miLista.add(new Integer(2001)); //¡error de compilación, no es un String!

Y como el compilador ya sabe que es un String, no hace falta el casting.

String s = miLista.get(0);
String st = miLista.get(1); 

NO se pueden utilizar con primitivos , pero si con las clases que se correponden con ellos.

Para crear una clase fíjate en el siguiente ejemplo:

public class Cajón<T>{
   private T t;

   public void set (T t){
   this.t = t;
   }

   public T get( ){
   return t;
   }

}

Esta clase cuenta con 2 métodos. La T es el tipo de parámetro que le vamos a asignar. Supongamos que queremos un Cajón de Calcetines y otro Cajón de Camisetas.

public class Cajón<Calcetines> 
public class Cajón<Camisetas>

Todos los métodos de tu clase genética pueden ser utilizados en cualquier de ellas, pero no podrás usar calcetiones con Cajón de Camisetas ni camisetas con Cajón de Calcetines.

Y por último un ejemplo de un método:

 void añadirCalcetines (Cajón<Calcetines> cal){
   cal.add(new Calcetines( ));
}

Por convención , los nombres de los tipos de parámetros se escriben como una leta mayúscula:

  • T = tipo
  • E = elemento
  • N = número
  • K= key
  • V = value

Relacionado



Autor : Julián

⚠️ **GitHub.com Fallback** ⚠️