Foro de elhacker.net

Programación => Java => Mensaje iniciado por: camilortte en 6 Marzo 2012, 18:48 pm



Título: Plantillas en Java
Publicado por: camilortte en 6 Marzo 2012, 18:48 pm
Buen día a todos:  :D

les comento que , eh tenido problemas para manejar, digamos  de alguna forma tipos de datos genéricos. Personalmente en c++ lo lograba por medio de plantillas (templates) de la siguiente forma:

Código:
#include <iostream>

using namespace std;

template <typename T>
T mayor(T a, T b){
    if(a > b){
        return a;
    }else {
        return b;
    }
}

int main(int argc, char **argv)
{
    cout<<mayor("perro","gato")<<endl;     
    cout<<mayor(5,3)<<endl;
    cout<<mayor(4.23,5.69)<<endl;
    return 0;
}

esto me da como resultado:
perro
5
5.69

de esta forma , manejaba casi cualquier tipo de dato siendo muy sencillo.

ahora lo estoy intentando hacer en java , con la clase Object de esta forma:

Código:
package paquete;

public class GenericaMayor {   
    public Object mayor(Object valor1,Object valor2){
        if(valor1 >= valor2){        //aca el error.
            return valor1;
        }else{
            return valor2;
        }   
    }
}

pero eh tenido problemas en compilación..

la cuestión es ¿como puedo hacer esto que hacia en c++ , pero en java?. :huh: :huh: :huh:


gracias de antemano , saludo a todos.




Título: Re: Plantillas en Java
Publicado por: leogtz en 7 Marzo 2012, 04:52 am
Aquí se les llama "clases genéricas".

En realidad es muy sencillo, un ejemplo:

Código
  1. class MyGeneric {
  2. public static void main(String ... args) {
  3. Integer x = 123;
  4. Perro<Integer> dog = new Perro<Integer>(x);
  5. System.out.println(dog.getValue());
  6. }
  7. }
  8. class Perro<T> {
  9. T myValue = null;
  10.  
  11. public Perro(T t) {
  12. myValue = t;
  13. }
  14.  
  15. public void setValue(T t) {
  16. myValue = t;
  17. }
  18.  
  19. public T getValue() {
  20. return myValue;
  21. }
  22.  
  23. }
  24.  


Título: Re: Plantillas en Java
Publicado por: camilortte en 9 Marzo 2012, 02:28 am
gracias por contestar.

la cuestión es que con la clase genérica , no puedo hacer comparaciones de mayor y menos entre tipos de datos, o no se si me complique.

la única forma de que pude sacar una plantilla presida a la del la función en c++ es así:

Código:
package paquete;

public class Generica  {

public <T extends Comparable> T generico(T valor1,T valor2){
if(valor1.compareTo(valor2)== 1){
return valor1;
}else{
return valor2;
}
}

}
 

así de esta forma ya puedo utilizar los métodos compareTo asiendo así una verdadera comparación.

pero no se si esto es lo mas "limpio" para esta solución.

saludos.