2012-02-15 586 views
3

如果我使用反射調用一個方法,我可以在不拋出空指針異常的情況下正常工作的唯一方法是在我調用的方法中返回一個int值。如何在java中使用反射調用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

我想你會不會存儲返回值...? – 2012-02-15 16:24:52

+1

看到這個鏈接,如果它有幫助http://www.mkyong.com/java/how-to-use-reflection-to-call-java-method-at-runtime/ – kosa 2012-02-15 16:25:47

回答

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; 
} 

請注意,我簡化了你的代碼使用可變參數位。

1

如果你的方法不再返回什麼,不分配調用它的結果:

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

這僅僅不會是它,雖然:唯一的原因,我可以看到你得到NullPointerException將會是,如果您試圖使用該變量您稍後將結果分配給(returnValue),因爲invoke返回null如果方法的返回類型爲void