2012-08-23 21 views
5

Si tengo una clase con un constructor que toma un tipo genérico establecieron los parámetros:Java getConstructor (tipos) con tipos parametrizable

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

...? ¿Cómo me refiero a esa clase establecieron los parámetros del mapa si quiere llamar a:

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

(Donde cls es la clase Foo.)

quiero hacer algo como:

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

... pero eso no funciona.

¡Estoy seguro de que hay una respuesta simple para esto!

+1

Salida este enlace en Java [ "Tipo de borrado"] (http://code.stephenmorley.org/articles/java-generics-type-erasure/). Consulte también [Reflejar tipos genéricos] (http://thekevindolan.com/2010/03/reflecting-generic-types/). – paulsm4

+0

Ah, sí, tipo borrado, si hubiera pensado más sobre esto y hubiera leído lo que Eclipse intentaba decirme, ¡probablemente me hubiera dado cuenta de eso! De todas maneras, gracias por el enlace. – Mikesname

Respuesta

11

En tiempo de ejecución, esto:

Map<String,Object> 

es en realidad sólo un mapa, sin ningún parámetro.

Calling

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

puede hacer referencia al constructor con sólo el tipo de mapa. Los parámetros genéricos se borran de tiempo de ejecución:

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