java - 为什么 Java 选择这个重载而不是其他重载

标签 java overload-resolution

谁能向我解释为什么 Java 选择第二个重载而不是第一个?

public static void foo (int a, double b, double...c) {}
public static void foo (double...a) {}
public static void bar ()
{
    // this is the second
    foo(1);
}

我认为当我传递 1 作为参数时,Java 会选择第一个参数,因为 intdouble 更具体?

谢谢

最佳答案

第二种方法是唯一可以匹配的方法。你只有 1 个参数。第一个 foo 至少需要两个:一个 int 和一个 double,因此无法匹配。

第二个 foo 匹配,因为可以匹配任意数量的数字。 Java 会隐式地将您的 int 1 提升为 double,以便它可以通过方法调用转换进行匹配。

关于java - 为什么 Java 选择这个重载而不是其他重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436196/

相关文章:

c++ - 模板类构造函数重载决议

java - Netflix Karyon 不使用 Governator 创建资源类

java - void方法中使用的void方法的组成? ( java )

java - Eclipse:同时替换多个不同的正则表达式

java - 索引为 0 而不是索引 1 的 heapSort 的 maxheap 方法

c++ - 如何使用自定义非纯交换函数参数化算法?

c++ - 2 参数函数的重载决策不正确

c++ - 用户自定义算子转换解析顺序

模板和非模板函数之间的 C++ 重载解析

java - 知道可达性的缓存