2013-08-22 3 views
1

매개 변수를 지정하지 않고 리플렉션을 사용하여 메서드를 사용할 수 있습니까? 매개 변수를 지정하지 않은 Java/Taking 메서드

나는 노력이 : nameOfTheMethod 5 개 매개 변수와 함수가

method = className.class.getMethod("nameOfTheMethod"); 

.

그러나 nameOfTheMethod은 매개 변수가없는 함수이고 java.lang.NoSuchMethodException이라고 생각합니다.

+0

매개 변수의 데이터 유형을 배열로 지정하고 getMethod (...)에도 전달해야합니다. – LuigiEdlCarno

답변

2

이 Class 객체가 나타내는 클래스 또는 인터페이스에 의해 선언 된 모든 메소드

를 얻을 수 있습니다.

Method[] methods = ClassName.class.getDeclaredMethods(); 

그들을 통해 반복 처리하고 당신을 찾을 수와

. 매개 변수를 확인해야하므로 메서드가 오버로드 된 경우에는 안전하지 않습니다.

1

이렇게 할 수 없으므로 getMethod에는 매개 변수 수가 필요합니다.

사용할 수있는 것은 getMethods 또는 getDeclaredMethods이며 찾고자하는 내용에 따라 원하는 이름으로 찾으실 수 있습니다.

이름이 서로 다른 매개 변수가 하나 이상일 수 있습니다. 것

getMethods 클래스 또는 인터페이스 수퍼 및 슈퍼로부터 상속 그러한 선언이 Class 오브젝트가 나타내는 클래스 또는 인터페이스의 모든 public 멤버 메소드를 반영 방법 객체 배열을 리턴

getDeclaredMethods 것이다

는 ARRA을 반환하면서 이 Class 객체가 나타내는 클래스 또는 인터페이스에 의해 선언 된 모든 메서드를 리플 렉트하는 Method 객체 여기에는 public, protected, default (패키지) 액세스 및 private 메소드가 포함되지만 상속 된 메소드는 제외됩니다.

1

getDeclaredMethods()을 사용하고 반환 된 배열을 반복하여이를 수행 할 수 있습니다.

이 방법은 단점을 가지고 있으며, 오버로드 된 방법에 대해서만 신뢰할 만합니다. 그러나 쉽게이 작업을 수행 할 수 있으므로 지정된 이름의 모든 메서드 또는 배열이 검색됩니다.

0

당신은

Class[] cArg = new Class[5]; 
cArg[0] = Long.class; 
cArg[1] = Long.class; 
cArg[2] = Long.class; 
cArg[3] = Long.class; 
cArg[4] = Long.class; 
Method lMethod = c.getMethod("nameOfMethod", cArg); 

이 매개 변수는 각각의있는 입력 무엇이든 함께 걷고 교체 시도 매개 변수 유형

을 지정해야합니다.

관련 문제