Java 我得到了这个警告:非varargs调用varargs方法,最后一个参数的参数类型不精确;
这是我得到警告的示例代码Java 我得到了这个警告:非varargs调用varargs方法,最后一个参数的参数类型不精确;,java,Java,这是我得到警告的示例代码 Class aClass = Class.forName(impl); Method method = aClass.getMethod("getInstance", null); item = (PreferenceItem) method.invoke(null, null); 警告: 警告:varargs方法的非varargs调用,最后一个参数的参数类型不精确; 强制转换为java.lang.Class以进行varargs调用 强制转换为java.lang.Cl
Class aClass = Class.forName(impl);
Method method = aClass.getMethod("getInstance", null);
item = (PreferenceItem) method.invoke(null, null);
警告:
警告:varargs方法的非varargs调用,最后一个参数的参数类型不精确;
强制转换为java.lang.Class以进行varargs调用
强制转换为java.lang.Class[]以进行非varargs调用并抑制此警告
Method=aClass.getMethod(“getInstance”,null)
请帮我解决这个问题好吧,编译器警告告诉你你需要知道的一切。它不知道是将
null
视为直接传递到getMethod
的Class[]
类,还是将其视为新Class[]
数组中的单个null
项。我怀疑您想要前一种行为,因此将null
强制转换为Class[]
:
Method method = aClass.getMethod("getInstance", (Class<?>[]) null);
谢谢乔恩,这个警告是愚蠢的。。。。。。。。。。。。我刚刚按照您的建议更改了代码aClass.getMethod(“getInstance”);如果有人想知道(像我一样),它似乎默认将null视为整个数组
类[]
,而不是数组中的单个null元素(至少根据此处发布的答案:)。当然,这可能是最好的实践,为特殊性而施法,但在考虑是否将数组作为最后一个参数的方法重构为varargs时,最好知道这一点。在本例中,转换为Class
将生成一个包含单个null
元素的数组?@JaimeHablutzel:BecauseClass.getMethod(String,Class)这一事实的基本原理是什么
不存在-因此15.12.2中的前两个阶段找不到任何可调用的方法。对于varargs,它之所以有效,是因为有一个变量arity方法Class.getMethod(String,Class[])
-请参阅15.12.2.4。数组按照15.12.4.2构造,参数(值null)是数组中的唯一元素。
Method method = aClass.getMethod("getInstance", (Class<?>) null);
Method method = aClass.getMethod("getInstance");