2012-08-23 7 views
5

私はparametizedジェネリック型取るコンストラクタを持つクラスがある場合と(タイプ):JavaのgetConstructor parametised種類

public class Foo { 
    public Foo(Map<String, Object> data) { 
     ... 
    } 
} 

...私はparametized地図のクラスは、私が電話をかけたい場合は、その参照行う方法を:私のような何かをしたい

Constructor constructor = cls.getConstructor(/*the Map class! */) 

(。clsはFooのクラスである場合は)

Constructor constructor = cls.getConstructor(Map<String,Object>.class); 

...でも動作しません。

私はこれに簡単な答えがあると確信しています!

+1

は、Java [「型消去」](http://code.stephenmorley.org/articles/java-generics-type-erasure/)にこのリンクをチェックしてください。 [ジェネリック型の反映](http://thekevindolan.com/2010/03/reflecting-generic-types/)も参照してください。 – paulsm4

+0

ああ、私はこのことについてもっと考えていましたが、実際にEclipseが私に言っていることを実際に読んだことがありました。とにかく、リンクをありがとう。 – Mikesname

答えて

11

実行時には、この:

Map<String,Object> 

は、パラメータを指定せず、実際には地図です。

あなただけの地図の種類によってコンストラクタを参照することができ

cls.getConstructor(Map.class) will be enough 
4

を呼び出します。一般的なパラメータは、実行時のために消去されています

Constructor constructor = Foo.class.getConstructor(Map.class);