2012-08-23 7 views
5

Jeśli mam klasy z konstruktora, że ​​trwa parametized typu rodzajowego:Java getConstructor (typy) z parametised typów

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

... Jak mogę odwołać że klasa parametized mapie, jeśli chcę zadzwonić:

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

(Gdzie cls jest klasa Foo).

chcę zrobić coś takiego:

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

... ale to nie działa.

Jestem pewien, że istnieje prosta odpowiedź na to!

+1

Wyjazd ten link na Java [ "typ wymazywania"] (http://code.stephenmorley.org/articles/java-generics-type-erasure/). Zobacz także [Odbicie typów ogólnych] (http://thekevindolan.com/2010/03/reflecting-generic- typeses/). – paulsm4

+0

Ach, tak, wymazanie, pomyślałem o tym więcej i przeczytałem, co Eclipse próbował mi powiedzieć, że pewnie bym to rozgrywał! W każdym razie, dzięki za link. – Mikesname

Odpowiedz

11

W czasie wykonywania tego:

Map<String,Object> 

Czy rzeczywiście tylko mapy, bez żadnych parametrów.

Wywołanie

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

Można odwołać tylko przez konstruktora typu Mapa. Parametry ogólne są usuwane na starcie:

Constructor constructor = Foo.class.getConstructor(Map.class); 
Powiązane problemy