2012-08-23 15 views
5

Ben parametized genel tür alan bir kurucu ile bir sınıf varsa ile (tip):Java getConstructor parametize türleri

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

... Ben parametized haritası sınıf I aramak istiyorsanız belirtmeyi nasıl:

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

(nerede cls olan Foo sınıfı.)

ben böyle bir şey yapmak istiyorum:

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

... ama bu işe yaramıyor.

Bunun için basit bir cevap olduğuna eminim!

+1

Kontrol dışarı Java konusu bağlantının [ "tip silme"] (http://code.stephenmorley.org/articles/java-generics-type-erasure/). Ayrıca bakınız [Genel tiplerin yansıtılması] (http://thekevindolan.com/2010/03/reflecting-generic-types/). – paulsm4

+0

Ah evet silme, bu konuda daha fazla düşünmüştüm ve aslında Eclipse'nin bana söylemeye çalıştığı şeyi okuyabilseydim muhtemelen bunu anladım! Her neyse, bağlantı için teşekkürler. – Mikesname

cevap

11

Çalışma zamanında, bu:

Map<String,Object> 

herhangi bir parametre olmadan aslında sadece bir haritada mı.

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

Sadece Harita türüne göre yapıcısı başvurabilirsiniz çağrılması

. Jenerik parametreler çalışma zamanı için silinir:

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