Plantillas en Java

Iniciado por camilortte, 6 Marzo 2012, 18:48 PM

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

camilortte

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:

#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:

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.



leogtz

Aquí se les llama "clases genéricas".

En realidad es muy sencillo, un ejemplo:

Código (java) [Seleccionar]
class MyGeneric {
public static void main(String ... args) {
Integer x = 123;
Perro<Integer> dog = new Perro<Integer>(x);
System.out.println(dog.getValue());
}
}
class Perro<T> {
T myValue = null;

public Perro(T t) {
myValue = t;
}

public void setValue(T t) {
myValue = t;
}

public T getValue() {
return myValue;
}

}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

camilortte

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í:

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.