如何使用反射调用java中的void方法
如果我使用反射调用方法,则使其正常工作而不引发空指针异常的唯一方法是在我调用的方法中返回 int 值。
比如我要调用的方法:
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,调用似乎总是抛出空指针异常。我是否需要改变处理 void 方法的方式?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您能告诉我们 NullPointerException 是在哪里抛出的吗?此代码工作正常:
请注意,我使用可变参数简化了您的代码:
显然在这种情况下
returnValue
是null
。Can you show us where the
NullPointerException
is thrown? This codes works correctly:Note that I simplified your code a bit using varargs:
Obviously in this case
returnValue
isnull
.如果您的方法不再返回任何内容,请不要分配调用它的结果:
不过,单凭这一点不会:我可以看到您获得
NullPointerException<的唯一原因/code> 如果您尝试使用稍后将结果分配给 (
returnValue
) 的变量,因为invoke
返回null
。If your method no longer returns anything, don't assign the result of invoking it:
That alone won't be it, though: The only reason I can see for you getting a
NullPointerException
would be if you'd tried to use that variable you assigned the result to (returnValue
) later, sinceinvoke
returnsnull
if the method's return type isvoid
.