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

发布于 2025-01-06 15:12:11 字数 422 浏览 0 评论 0 原文

如果我使用反射调用方法,则使其正常工作而不引发空指针异常的唯一方法是在我调用的方法中返回 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 方法的方式?

谢谢

If I call a method using reflection, the only way I can get it to work properly without throwing a null pointer exception is by returning an int value in the method I'm calling.

For example, the method I want to call:

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

The way I call it:

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

Changing the return type to void and calling it seems to always throw a null pointer exception. Do I need to change how I am approaching things for void methods?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情绪失控 2025-01-13 15:12:11

您能告诉我们 NullPointerException 是在哪里抛出的吗?此代码工作正常:

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

请注意,我使用可变参数简化了您的代码:

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

显然在这种情况下 returnValuenull

Can you show us where the NullPointerException is thrown? This codes works correctly:

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

Note that I simplified your code a bit using varargs:

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

Obviously in this case returnValue is null.

风为裳 2025-01-13 15:12:11

如果您的方法不再返回任何内容,请不要分配调用它的结果:

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

不过,单凭这一点不会:我可以看到您获得NullPointerException<的唯一原因/code> 如果您尝试使用稍后将结果分配给 (returnValue) 的变量,因为 invoke 返回 null

If your method no longer returns anything, don't assign the result of invoking it:

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

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, since invoke returns null if the method's return type is void.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文