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

4

如果我使用反射来调用一个方法,想要让它正常工作而不抛出空指针异常的唯一方法就是在被调用的方法中返回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方法的处理方式吗?

谢谢


我认为你只需要不存储返回值就可以了,对吗? - Louis Wasserman
1
请查看此链接以了解如何使用反射在运行时调用Java方法。 - kosa
2个回答

5

您能告诉我们 NullPointerException 抛出的位置吗?这段代码是正确的:

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

请注意,我使用可变参数简化了您的代码:
Method setScore = builder.getClass().getMethod("setScore", int.class);
Object returnValue = setScore.invoke(builder, theScore);

显然在这种情况下,returnValuenull

1
如果你的方法不再返回任何内容,不要分配调用它的结果:
setScore.invoke(builder, new Object[]{theScore});

但仅凭这些还不够:我能想到你会得到NullPointerException的唯一原因是,如果你稍后尝试使用分配结果的变量(returnValue),因为{{link1:invoke}}返回null,如果方法的返回类型是void


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接