当前位置: 首页 > 面试题库 >

我得到了这个警告:varargs方法的non-varargs调用,其中最后一个参数的参数类型不精确;

姚宪
2023-03-14
问题内容

这是我收到警告的示例代码。

Class aClass = Class.forName(impl);
Method method = aClass.getMethod("getInstance", null);
item = (PreferenceItem) method.invoke(null, null);

警告:

警告:最后一个参数的参数类型不精确的varargs方法的无变量调用;转换为java.lang.Class以进行varargs调用转换为java.lang.Class
[]以进行非varargs调用并抑制此警告。Method method = aClass.getMethod(“ getInstance”,null);

请帮我解决这个问题


问题答案:

好吧,编译器警告会告诉您所有您需要了解的内容。它不知道是将nulla作为Class<?>[]直接传递给getMethod,还是作为nullClass<?>[]数组中的单个条目来对待。我怀疑您想要以前的行为,因此将转换nullClass<?>[]

Method method = aClass.getMethod("getInstance", (Class<?>[]) null);

如果您希望它创建一个Class<?>[]具有单个null元素的对象,则可以将其强制转换为Class<?>

Method method = aClass.getMethod("getInstance", (Class<?>) null);

或者,您可以完全删除参数,然后让编译器构建一个空数组:

Method method = aClass.getMethod("getInstance");


 类似资料:
  • 问题内容: 如果我有一个vararg Java方法并调用,则我和 都将null。但是,如果我呼叫f,则其本身为null。为什么会这样呢? 我应该怎么称呼这样的? 问题答案: 问题是,当你使用原义null时,Java不知道它应该是哪种类型。它可以是空对象,也可以是空对象数组。对于单个参数,假定为后者。 你有两种选择。将null显式转换为Object或使用强类型变量调用该方法。请参见下面的示例: 输出

  • 问题内容: 我在JDK 1.8上将IntelliJ IDEA与javac一起使用。我有以下代码: IntelliJ IDEA不会在上面的代码中突出显示任何内容作为警告。但是,在编译时,以下行将显示在“消息”视图的“生成”选项卡中: 警告:(L,C)java:Varargs方法可能会导致不可修改的varargs参数varargs造成堆污染 注意#1:我已经指定了。 注意#2:指向作为参数传递给 假设

  • 我目前正在设置IntelliJ Inspection Profile,以便它可以在编辑器中指出潜在的问题。但我并没有找到一种方法来指出javac警告“最后一个参数的参数类型不精确的varargs方法的非varargs调用;”。 考虑下面的片段: 在Eclipse中,方法调用,带有下划线(带有一条锯齿状的黄线),但在IntelliJ中,这似乎不会被检查发现。不过,当我在IntelliJ中编译文件时,

  • 问题内容: 考虑方法声明: 该Object …参数只是对Objects 数组的引用。有没有办法在引用实际Object数组时使用此方法?如果我将Object数组传递给…参数-结果参数值将是一个二维数组-因为an Object[]本身就是an Object: 因此,数组的第一个组件(String.format方法中使用了哪个)将是一个数组,他将生成: 然后由于数组大小为1而发生错误。 该大胆的顺序是真

  • IntelliJ Idea对我的测试用例中的一个语句发出以下警告。 警告:为varargs参数创建未经检查的泛型数组 编译器发出未经检查警告的位置 我所做的就是: