2011-12-30 12 views
55

Voglio creare una classe KeyValue ma in modo generico e questo è quello che ho scritto:come creare un costruttore generico per una classe generica in 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); 
    } 
} 

l'errore dice: "Errore di sintassi sul gettone '>', Identifier previsto dopo questo token"

come devo creare un costruttore generico in java, quindi?

+0

@dasblinkenlight ha la risposta giusta. Volevo solo dire che AbstractMap.SimpleEntry fa quello che vuoi. – user949300

+0

Qualcuno con un rappresentante sufficiente può correggere gentilmente l'ortografia della domanda? –

risposta

68

È necessario rimuovere <T, E> dalla firma del costruttore: è già lì implicitamente.

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

è possibile utilizzare limiti per quanto possibile, ad esempio public class KeyValue in modo che sia più di tipo sicuro –

+0

@PragalathanM Questo è certamente vero, ma va ben oltre l'aiuto con un banale errore di sintassi nell'OP. – dasblinkenlight

+4

Voglio solo sottolineare, quindi l'OP sa: Il costruttore qui è * NON * generico. La classe è. I metodi generici (e costruttori) e le classi generiche sono cose completamente diverse. – Darkhogg

3

Write costruttore esattamente nello stesso modo in cui ha scritto altri metodi

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

Che non verrà compilato. Hai la dichiarazione del tipo dopo il nome del tipo, deve essere prima in un ctor. – Saish

+0

mmm ... Non penso) –

+0

Provalo con javac. – Saish

Problemi correlati