如果我使用反射调用方法,那么我可以在不抛出空指针异常的情况下使其正常工作的唯一方法是在我正在调用的方法中返回一个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并调用它似乎总是抛出空指针异常。我是否需要改变我接近无效方法的方法?
由于
答案 0 :(得分:5)
您能告诉我们NullPointerException
被抛出的位置吗?此代码可以正常工作:
public void setScore(int n)
{
this.score = n;
}
请注意,我使用varargs简化了您的代码:
Method setScore = builder.getClass().getMethod("setScore", int.class);
Object returnValue = setScore.invoke(builder, theScore);
显然,在这种情况下returnValue
是null
。
答案 1 :(得分:1)
如果您的方法不再返回任何内容,请不要指定调用它的结果:
setScore.invoke(builder, new Object[]{theScore});
仅此不会是,但是:如果您尝试使用分配了结果的变量,我可以看到您获得NullPointerException
的唯一原因到(returnValue
)之后,如果方法的返回类型为null
,则invoke
会返回void
。