当前位置: 首页 > 知识库问答 >
问题:

intellij inspections没有显示varargs方法的非varargs调用的javac警告

海景曜
2023-03-14

我目前正在设置IntelliJ Inspection Profile,以便它可以在编辑器中指出潜在的问题。但我并没有找到一种方法来指出javac警告“最后一个参数的参数类型不精确的varargs方法的非varargs调用;”。

考虑下面的片段:

public static void varArgsMethod(Object ... arr) { }

public static void main(String[] args) {
    varArgsMethod(args);
}

在Eclipse中,方法调用,varArgsMethod(args)带有下划线(带有一条锯齿状的黄线),但在IntelliJ中,这似乎不会被检查发现。不过,当我在IntelliJ中编译文件时,警告确实会出现在“消息面板”中:

共有1个答案

王德华
2023-03-14

此确切警告目前无法作为检查使用。可用的是将'null'参数与var arg方法混淆检查。它报告单个null,作为varargs方法最后一个参数的参数。这个问题由您引用的同一个javac警告报告。所以我猜这大概是你想要的一半。

您可能想要查看的另一个检查是混淆原始数组参数到var-arg方法。这报告了一个类似的问题,这是javac或Eclipse没有报告的。

 类似资料:
  • 问题内容: 在Java 7中,可以选择添加注释来抑制在编译带有不可修改的varargs参数的方法时收到的警告。Project Coin的提案规定,当该方法确保仅将与varargs参数相同类型的元素存储在varargs数组中时,应使用注释。 非安全方法的一个例子是什么? 问题答案: 例如,不安全,可能会将非T存储在数组中,从而在[2]处引起问题 通过使用@SafeVarargs标记该方法,您可以向编

  • 问题内容: 这是一个无法编译的代码示例: 有人可以告诉我这些方法模棱两可的原因吗?先感谢您。 问题答案: 考虑方法签名 和 在装箱和拆箱之前,通话不会是模棱两可的。为了确保与Java的早期版本兼容,该调用将保持明确。因此,重载解决方案的第一阶段不允许装箱,拆箱或可变Arity调用,这些操作都是在同一时间引入的。可变Arity调用是通过为最后一个参数(而不是数组)传递参数序列来调用varargs方法

  • 有人能告诉我这些方法模棱两可的原因吗?提前谢谢你。

  • 问题内容: 我对Java的 varargs 方法有些困惑: 当我尝试在不传递任何参数的情况下进行调用时,将调用方法的版本。我不明白为什么;通常,编译器必须引发错误。 相比之下,当我尝试不带任何参数的情况下,以下代码会生成编译器错误: 问题答案: 这里适用的一般规则是:如果一个方法签名严格比另一个方法签名 更具体 ,则Java选择它时不会出错。 从直觉上讲,如果您可以完全删除一个方法签名,则该方法签

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

  • 我有两个重载的方法,分别是varargs int和long。当我运行一个传递整数的测试时,它似乎更喜欢varargs long方法。然而,如果我使这些方法是静态的并使用整数运行,它似乎更喜欢varargs int方法。这是怎么回事? 产出: 内长varargs 1 内部静态int varargs 1