2012-08-23 2 views
5

나는 parametized 제네릭 형식 사용하는 생성자를 가진 클래스가있는 경우와 (유형) :자바 getConstructor 메소드 parametised 유형

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

... 내가 parametized지도의 클래스가 내가 전화 할 경우 해당 참조 할 방법을 :

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

(어디 cls 인 푸 클래스입니다.)

나는 같은 것을하고 싶지 :

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

...하지만 작동하지 않습니다.

나는 이것에 간단한 답이있을 것이라고 확신합니다!

+1

체크 아웃 자바 링크 [ "타입 삭제"] (http://code.stephenmorley.org/articles/java-generics-type-erasure/). [일반 유형 반영하기] (http://thekevindolan.com/2010/03/reflecting-generic-types/)를 참조하십시오. – paulsm4

+0

아아 타입 소거, 내가 이것에 대해 더 많이 생각하고 실제로 이클립스가 저에게 말하려고 한 것을 읽었을 것입니다. 어쨌든 링크 주셔서 감사합니다. – Mikesname

답변

11

런타임시이 :

Map<String,Object> 

은 매개 변수없이, 실제로 단지지도입니다.

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

당신은 단지지도 유형에 생성자를 참조 할 수 호출

. 일반 매개 변수는 런타임에 대한 삭제됩니다

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