2013-10-23 2 views
4

제네릭 매개 변수가 전달되는 클래스의 생성자를 어떻게 찾을 수 있습니까?일반 매개 변수가있는 생성자 찾기

class myClass<T> { 
    public myClass(T val1, Long val2 String val3){ 
     ... 
    } 
} 

getConstructor() 적절한 매개 변수 부족 일반적인 반사 방식 사용 : 예 이러한 클래스에 대한

Constructor<?> myConstructor = myClass.class.getConstructor(??what here??, Long.class, String.class); 

어떤 아이디어? 때문에 제네릭 형식 삭제의 Object.class

이 가능한 다른보다 구체적인 유형이 없습니다 :

답변

6

개체 유형입니다.

더 좋은 여기 물건 : get-type-of-a-generic-parameter-in-java-with-reflection

예를 들어, 이것은 "foo는"반환

public class Bar<T> { 
    private T t; 

    public Bar(T t) { 
     this.t = t; 
    } 

    @Override 
    public String toString() { 
     return t.toString(); 
    } 
} 

에 대한이 :

Class<?>[] paramArray = {Object.class}; 
Constructor<?> myConstructor = Bar.class.getConstructor(paramArray); 
String foo = "foo"; 
Bar myBar = (Bar) myConstructor.newInstance(foo); 
System.out.println(myBar); 
-1

그것은 매우 정직하고 있습니다. 당신이 문자열을 원하는 경우

Constructor<T> myConstructor = myClass.class.getConstructor(T val, Long.class, String.class); 

, 그것은 다음과 같습니다 : 당신이 INT를 원하는 경우는 다음과 같습니다

Constructor<String> myConstructor = myClass.class.getConstructor(String val, Long.class, String.class); 

:

+0

의 int가로 사용할 수 없습니다

Constructor<int> myConstructor = myClass.class.getConstructor(int val, Long.class, String.class); 
일반, 당신은 정수를 사용해야합니다. 그 마지막 예가 컨스트럭터 ... – LadyCailin

+0

이 코드를 테스트 해 보셨습니까? 이것도 컴파일 : 'myClass.class.getConstructor (String val, Long.class, String.class); –

관련 문제