Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Tipos y clases genéricos en Java

  • 1 Respuestas
  • 2407 Vistas

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

Desconectado Expermicid

  • *
  • Underc0der
  • Mensajes: 457
  • Actividad:
    0%
  • Reputación 0
  • _-Expermicid-_
    • Ver Perfil
  • Skype: expermicid.xd
« 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: 64
  • Actividad:
    1.67%
  • Reputación 0
  • |Un día sin aprender nada, es un día perdido..|
    • Ver Perfil
    • Email
« Respuesta #1 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=

 

¿Te gustó el post? COMPARTILO!



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

Iniciado por graphixx

Respuestas: 3
Vistas: 3561
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
Como compilar programas Java en la consola de comandos de Windows

Iniciado por tar3kw0rm3d

Respuestas: 2
Vistas: 3903
Ú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: 9156
Último mensaje Diciembre 04, 2017, 02:36:34 am
por graphixx
[LIBRO] Programación avanzada en Java - Sonia Jaramillo Valbuena

Iniciado por graphixx

Respuestas: 5
Vistas: 8213
Último mensaje Enero 23, 2019, 07:14:41 pm
por jashin
Tutorial: Traduccion de aplicaciones JAVA - Moviles [By :: SmartGenius :: ]

Iniciado por ProcessKill

Respuestas: 0
Vistas: 2403
Último mensaje Febrero 24, 2010, 04:26:07 pm
por ProcessKill