如何在java中使用反射调用void方法

如何在java中使用反射调用void方法

问题描述:

如果我使用反射调用一个方法,我可以在不抛出空指针异常的情况下正常工作的唯一方法是在我调用的方法中返回一个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

你能告诉我们在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}); 

这仅仅不会是它,虽然:唯一的原因,我可以看到你得到NullPointerException将会是,如果您试图使用该变量您稍后将结果分配给(returnValue),因为invoke返回null如果方法的返回类型为void