2012-02-15 2 views
3

리플렉션을 사용하여 메서드를 호출하면 null 포인터 예외를 throw하지 않고 제대로 작동하도록하는 유일한 방법은 호출하는 메서드에서 int 값을 반환하는 것입니다 .리플렉션을 사용하여 자바에서 void 메서드를 호출하는 방법

public int setScore(int n) 
{ 
this.score = n; 
return 1; 
} 

를 내가 전화하는 방법 :

Method setScore = myClass.getMethod("setScore", new Class<?>[]{int.class}); 
Object returnValue = setScore.invoke(builder, new Object[]{theScore}); 

void로 반환 유형을 변경하고 항상 널 포인터를 던질 것으로 보인다 호출

예를 들어, 방법은 내가 전화를 걸 예외. 무효화 방법에 대해 어떻게 접근하고 있는지를 변경해야합니까?

감사

+0

나는 당신이 반환 값을 저장하지 않을 것이라고 생각할 것입니다 ...? –

+1

도움이된다면이 링크 참조 http://www.mkyong.com/java/how-to-use-reflection-to-call-java-method-at-runtime/ – kosa

답변

5

당신은 NullPointerException가 발생 어디 있는지 보여줄 수 있습니까? 이 코드는 제대로 작동합니다 returnValuenull이 경우에 분명히

Method setScore = builder.getClass().getMethod("setScore", int.class); 
Object returnValue = setScore.invoke(builder, theScore); 

: 나는 당신의 코드 가변 인자를 사용하여 비트를 단순화

public void setScore(int n) 
{ 
    this.score = n; 
} 

참고.

setScore.invoke(builder, new Object[]{theScore}); 

혼자 는하지만,을되지 않습니다 :

1

당신의 방법은 더 이상 아무것도 반환하는 경우는, 그것을 호출 한 결과를 지정하지 않은 당신이 얻기를 위해 볼 수있는 유일한 이유 NullPointerExceptioninvokenull 인 경우 결과를 void으로 반환하므로 결과를 할당 한 변수를 나중에 (returnValue)에 사용하려고하면됩니다.

관련 문제