繁体   English   中英

在Java中,为什么调用foo()没有给定2个varags方法foo(int ... ints)和foo(Object ... objects)?

[英]In Java, why is the call foo() not ambigious given 2 varags methods foo(int… ints) and foo(Object… objects)?

如果我只声明2个varargs方法如下:

public void foo(String... strings) {
    System.out.println("Foo with Strings");
}

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

然后有代码:

foo();

由于预期的模糊性,这是编译器错误。

但是,如果我只有以下2个版本的foo:

public void foo(Object... objects) {
    System.out.println("Foo with Objects");
}

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

那么代码

foo();

调用方法的int版本。 任何人都可以解释为什么第二个例子不是同样含糊不清,为什么它解析为Object方法的int方法。 谢谢。

如果我从准备scjp时正确回忆起来,在第一种情况下你有2个参数,它们之间没有关系,所以编译器不能选择一个。

在第二种情况下,启用装箱(1.5+),int可以是Integer,它是Object的子集,如果发生冲突,编译器将始终使用最具体的定义。 所以整数(int)是优先的。

Java将始终使用最接近的类型,因此当您将ints传递给方法时,如果您没有int ...方法,它会将它们自动装入Integers并使用Object ....因为有一个int。 ..方法,Java将首先使用它。 这是Java编译器设计中的一个选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM