2011-12-30 9 views
55

Chcę utworzyć klasę keyvalue ale w rodzajowego sposób i to co pisałem:jak utworzyć ogólny konstruktor dla klasy ogólnej w 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); 
    } 
} 

błąd mówi: „błąd składni na znak«>»Identifier spodziewać po tym tokenem”

Jak mam utworzyć generyczny konstruktor w java?

+0

@dasblinkenlight ma właściwą odpowiedź. Chciałem tylko wspomnieć, że AbstractMap.SimpleEntry robi to, co chcesz. – user949300

+0

Czy osoba z wystarczającym rozmiarem może poprawić pisownię pytania? –

Odpowiedz

68

Musisz usunąć <T, E> z podpisu konstruktora: już tam jest niejawnie.

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

można użyć granice tam, gdzie to możliwe, na przykład publiczny klasa KeyValue więc, że jest to bardziej rodzaj bezpieczne –

+0

@PragalathanM To z pewnością prawda, ale to wykracza poza pomocą z trywialny błąd składni w OP. – dasblinkenlight

+4

Chcemy tylko wskazać, więc OP wie: Konstruktor tutaj jest * NIE * ogólny. Klasa jest. Ogólne metody (i konstruktory) i ogólne klasy są zupełnie różnymi rzeczami. – Darkhogg

3

Zapis konstruktor dokładnie taki sam sposób napisałeś innych metod

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

To się nie skomplikuje. Masz deklarację typu po nazwie typu, musi to być wcześniej w ctor. – Saish

+0

mmm ... Nie sądzę) –

+0

Wypróbuj za pomocą javac. – Saish

Powiązane problemy