Tipos y clases genéricos en Java

  • 1 Respuestas
  • 2622 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Expermicid

  • *
  • Ex-Staff
  • *****
  • Mensajes: 463
  • Actividad:
    23.33%
  • Reputación 0
  • _-Expermicid-_
  • Skype: expermicid.xd
    • Ver Perfil

Tipos y clases genéricos en Java

  • en: Octubre 13, 2014, 02:15:42 pm
Buenas a todos!!!

Para entender un poco este concepto veamos un ejemplo:

"Una fábrica de juegos de PC desea modelar un sistema de selección aleatoria de Jugadores (RandomSelector). Dado que la selección aleatoria se usa en muchos y variados juegos (p.e: selección aleatoria de números, de cartas, de colores, de fichas, etc.) se detallo que el RandomSelector debería ser diseñado de tal forma que se pueda usar con cualquier tipo de objetos.
El funcionamiento debería ser el siguiente: Una vez creado el RandomSelector con el tipo de Objeto que va a seleccionar este permanece así. Al RandomSelector se le pueden agregar N objetos a seleccionar. Cuando se le dice selectNext() retorna un objeto seleccionado de manera aleatoria."

En java, cuando se define una nueva clase, se debe conocer el tipo de datos con el que se trabajará. Pero en este caso necesitamos que sea independiente al tipo de datos, y así poder reutilizar la clase sin necesidad de hacer alteraciones al código.
Es aquí donde entra el concepto de tipos genéricos.

La utilización seria:

Código: Java
  1. public class RandomSelector<T> {
  2.  
  3. }

T es un tipo genérico que será sustituido por el tipo real cuando se instancie la clase.
Al RandomSelector se le podía agregar N objetos, vamos a necesitar hacer uso de alguna colección para ir guardando los objetos.

Código: Java
  1. import java.util.ArrayList;
  2. import java.util.Random;
  3.  
  4. public class RandomSelector<T> {
  5.  
  6.    private ArrayList<T> elementos;
  7.    private Random rn;
  8.    
  9.    public RandomSelector() {
  10.       this.elementos = new ArrayList<T>();
  11.       this.rn = new Random();
  12.    }
  13.  
  14. }

Verán como a la colección se le da como tipo de datos a T, el tipo genérico.
rn es de tipo Random, y nos va servir más adelante para la aleatoriedad.
Agregamos el método agregarElemento que recibe como parámetro un objeto de tipo T y lo agrega a la colección.

Código: Java
  1. public void agregarElemento(T elemento) {
  2.    this.elementos.add(elemento);
  3. }

Por otro lado, el método selectNext retorna un elemento de tipo T, y que es el que se ubica en la posición 'x' de la colección elementos. Dichas posición 'x' se obtiene con un numero aleatorio que va desde 0 al tamaño de la colección - 1

Código: Java
  1. public T selectNext() {
  2.    return this.elementos.get(rn.nextInt(this.elementos.size()));
  3. }

Probemos como funcionaría:

Código: Java
  1. public static void main(String[] args) {
  2.    RandomSelector<String> rS1 = new RandomSelector<String>();
  3.    rS1.agregarElemento("Piedra");
  4.    rS1.agregarElemento("Papel");
  5.    rS1.agregarElemento("Tijera");
  6.    System.out.println(rS1.selectNext());
  7.      
  8.    RandomSelector<Integer> rS2 = new RandomSelector<Integer>();
  9.    rS2.agregarElemento(1);
  10.    rS2.agregarElemento(2);
  11.    rS2.agregarElemento(3);
  12.    System.out.println(rS2.selectNext());
  13. }



Usamos un primer objeto RandomSelector con T = String y uno segundo con T = Integer. Y funcionó de igual manera sin importar el tipo

Por último existen una serie de convenciones para nombrar a los genéricos:
  • E – Element (usado bastante por Java Collections)
  • N – Number (para números)
  • K – Key (Llave, usado en mapas)
  • T – Type (Representa un tipo, es decir, una clase)
  • V – Value (representa el valor, también se usa en mapas)

Saludos

Desconectado LKI

  • *
  • Underc0der
  • Mensajes: 78
  • Actividad:
    0%
  • Reputación 0
  • |Un día sin aprender nada, es un día perdido..|
    • Ver Perfil
    • Email

Re:Tipos y clases genéricos en Java

  • en: Octubre 13, 2014, 11:50:50 pm
Buenísimo!! sabia el uso de tipos genéricos en C++ con las templates, pero en Java no tenia idea!.
 
Gracias por el aporte me sirvió mucho, Saludos!! :)
Ser mejor cada día es mi meta

 =LKI=

 

[Video Curso] Iniciacion a Java por DesarrolloWeb y EscuelaIT Mayo 2014

Iniciado por graphixx

Respuestas: 3
Vistas: 3936
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
Cheat-Sheet: JAVA - Hoja Guía para que no se me olvide

Iniciado por Denisse

Respuestas: 1
Vistas: 667
Último mensaje Julio 21, 2020, 12:43:49 pm
por DevCode
Como compilar programas Java en la consola de comandos de Windows

Iniciado por tar3kw0rm3d

Respuestas: 2
Vistas: 4248
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 9853
Último mensaje Diciembre 04, 2017, 02:36:34 am
por graphixx
Aprende programación en Java con este sencillo truco

Iniciado por tr0n

Respuestas: 2
Vistas: 2300
Último mensaje Marzo 03, 2020, 04:36:42 pm
por hebrondev