Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven和apache utils的编译错误不明确_Java_Apache_Maven_Apache Commons_Apache Commons Lang3 - Fatal编程技术网

Java Maven和apache utils的编译错误不明确

Java Maven和apache utils的编译错误不明确,java,apache,maven,apache-commons,apache-commons-lang3,Java,Apache,Maven,Apache Commons,Apache Commons Lang3,我在commons-lang3(3.1版)中使用org.apache.commons.lang3.BooleanUtils。 当我试图编译下一行代码时 BooleanUtils.xor(true, true); 使用maven编译器插件(3.3版),我收到一条编译失败消息: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on

我在
commons-lang3
(3.1版)中使用
org.apache.commons.lang3.BooleanUtils
。 当我试图编译下一行代码时

BooleanUtils.xor(true, true);
使用
maven编译器插件
(3.3版),我收到一条编译失败消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project exchange: Compilation failure
[ERROR] MyClass.java:[33,34] reference to xor is ambiguous, both method xor(boolean...) in org.apache.commons.lang3.BooleanUtils and method xor(java.lang.Boolean...) in org.apache.commons.lang3.BooleanUtils match
我使用Java1.7.0_55进行编译


我怎样才能解决这个问题呢?

有趣的是:在一个角落里,自动装箱直接妨碍了你

解决这个问题最简单的方法就是写

BooleanUtils.xor((boolean) true, (boolean) true)

发生此问题的原因是该方法的签名具有可变参数。调用方法时,有三个阶段搜索所有适用的方法。在其中搜索具有可变参数的方法,还允许装箱和取消装箱

因此,
xor(boolean…
xor(boolean…
在这里都适用,因为考虑了装箱。当多个方法适用时,只调用最特定的方法。但是在这种情况下,
boolean
boolean
无法比较,因此没有更具体的方法,因此编译器错误:两种方法都匹配

解决方法是创建显式数组:

public static void main(String[] args) {
    xor(new boolean[] { true, false }); // will call the primitive xor
    xor(new Boolean[] { Boolean.TRUE, Boolean.FALSE }); // will call the non-primitive xor
}

private static Boolean xor(Boolean... booleans) {
    System.out.println("Boolean...");
    return Boolean.TRUE;
}

private static boolean xor(boolean... booleans) {
    System.out.println("boolean...");
    return true;
}

实际上,编写它的最简单方法是
false
。实际上,这并不能解决编译器错误。它仍然存在,即使使用显式castI,我也可以验证这是否会导致编译器错误。这是我来这里之前做的第一件事。Java编译器仍然无法判断数组的类型是布尔型还是布尔型。这是可行的,但对我来说,这看起来像是非常糟糕的代码:)我很惊讶这会发生在apcahe-commons-lengs3中