2012-08-23 15 views
5

Se ho una classe con un costruttore che accetta un tipo generico parametized:Java getConstructor (tipi) con i tipi parametrizzabile

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

... come faccio riferimento che classe parametized Map se voglio chiamare:

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

(Dove cls è la classe Foo.)

voglio fare qualcosa di simile:

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

... ma questo non funziona.

Sono sicuro che c'è una risposta semplice a questo!

+1

controlla questo link su Java [ "cancellazione del tipo"] (http://code.stephenmorley.org/articles/java-generics-type-erasure/). Vedi anche [Reflecting generic types] (http://thekevindolan.com/2010/03/reflecting-generic-types/). – paulsm4

+0

Ah sì cancellazione di tipo, se avessi pensato di più a questo e effettivamente letto quello che Eclipse stava cercando di dirmi, probabilmente l'avrei capito! Comunque, grazie per il link. – Mikesname

risposta

11

In fase di esecuzione, questo:

Map<String,Object> 

è in realtà solo una mappa, senza alcun parametro.

Calling

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

è possibile fare riferimento al costruttore semplicemente il tipo di mappa. I parametri generici vengono cancellati per runtime:

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