2011-12-30 10 views
55

私はです。KeyValueクラスを作成したいが、一般的な方法で、これは私が書いたものです: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); 
    } 
} 

エラーは言う:「トークンの構文エラー 『>

』を、識別子は、このトークンの後に期待しました」

Javaでジェネリックコンストラクタを作成するにはどうすればよいですか?

+0

@dasblinkenlightが正しい答えを持っていると書きました。 AbstractMap.SimpleEntry があなたの望むことをしていると言いたいだけです。 – user949300

+0

十分な担当者を持つ人が質問のスペルを親切に訂正できますか?可能な限り、それは確かに事実だよりタイプセーフ –

答えて

68

コンストラクタの署名から<T, E>を削除する必要があります。暗黙的に既に存在しています。

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

あなたは、例えば publicクラスです。KeyValue 、 を境界を使用することができますOPの構文エラー。 –

+0

@PragalathanMですが、それは仕方些細なのヘルプを超えたよう – dasblinkenlight

+4

ちょうど指摘したいので、OPは知っています:ここのコンストラクタは* NOT * genericです。クラスはです。ジェネリックメソッド(およびコンストラクタ)とジェネリッククラスは全く異なるものです。 – Darkhogg

3

書き込みコンストラクタはまったく同じ方法あなたは他の方法

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

これはコンパイルされません。型名の後に型宣言があります。型宣言は型名の前にある必要があります。 – Saish

+0

mmm ...私はそうは思わない) –

+0

javacで試してみてください。 – Saish

関連する問題