2011-12-30 24 views
55

Quiero crear una clase KeyValue pero en forma genérica y esto es lo que he escrito:cómo crear un constructor genérico para una clase genérica en Java?

public class KeyValue<T,E> 
{ 

    private T key; 
    private E value; 
    /** 
    * @return the key 
    */ 
    public T getKey() { 
     return key; 
    } 
    /** 
    * @param key the key to set 
    */ 
    public void setKey(T key) { 
     this.key = key; 
    } 
    /** 
    * @return the value 
    */ 
    public E getValue() { 
     return value; 
    } 
    /** 
    * @param value the value to set 
    */ 
    public void setValue(E value) { 
     this.value = value; 
    } 

    public KeyValue <T, E>(T k , E v) // I get compile error here 
    { 
     setKey(k); 
     setValue(v); 
    } 
} 

el error dice: "Error de sintaxis en el símbolo '>', Identificador de espera después de esta señal"

¿cómo debería crear un constructor genérico en java?

+0

@dasblinkenlight tiene la respuesta correcta. Solo quería mencionar que AbstractMap.SimpleEntry hace lo que quiere. – user949300

+0

¿Puede alguien con suficiente reputación corregir amablemente la ortografía de la pregunta? –

Respuesta

68

Debe eliminar <T, E> de la firma del constructor: ya está allí implícitamente.

public KeyValue(T k , E v) // No compile errors here :) 
{ 
    setKey(k); 
    setValue(v); 
} 
+0

puede utilizar límites siempre que sea posible, por ejemplo clase pública KeyValue por lo que es más un tipo seguro –

+0

@PragalathanM Eso es cierto, pero va mucho más allá de la ayuda con un trivial error de sintaxis en el OP. – dasblinkenlight

+4

Solo quiero señalar, por lo que OP sabe: El constructor aquí es * NO * genérico. La clase es. Los métodos genéricos (y constructores) y las clases genéricas son cosas completamente diferentes. – Darkhogg

3

Escribir constructor de la misma manera que escribió otros métodos

public KeyValue(T k , E v) 
    { 
     setKey(k); 
     setValue(v); 
    } 
+0

Eso no se compilará. Tiene la declaración de tipo después del nombre de tipo, tiene que ser anterior en un ctor. – Saish

+0

mmm ... No lo creo) –

+0

Pruébalo con javac. – Saish

Cuestiones relacionadas