搜索java重载方法的顺序

时间:2014-03-27 00:41:01

标签: java overloading autoboxing

我有以下方法:

static void f(double x)
{
    System.out.println("f(double)");
}

static void f(Double xObj)
{
    System.out.println("f(Double)");
}

static void f(double... s)
{
    System.out.println("f(double...)");
}

public static void main(String[] args)
{
    double x1 = 8.5;
    Double xO1 = 5.25;
    f(x1);
    f(xO1);
}

输出:

f(double)

f(Double)

搜索重载方法的规则如下:

  1. 搜索重载方法,不包括使用自动(非)装箱的方法和带省略号的方法。
  2. 如果未找到任何方法,请使用包含自动(联合)装箱的方法再次搜索。
  3. 如果未找到任何方法,请使用包含省略号的方法再次搜索。
  4. 当使用原始参数调用方法f时,此规则适用,但使用自动装箱参数调用时,此规则不适用。

    如果这条规则是否正确,有人可以解释一下吗?什么是正确的?

    感谢您提前:)

1 个答案:

答案 0 :(得分:1)

Java使用this rule

选择最适合参数的方法

“当使用原始参数调用方法f时,此规则适用,但在使用自动装箱参数调用时,此规则不适用。”

当您移除方法f(Double)时,f(xO1)会调用f(double),因为那是唯一最具体 适合参数的方法

作为参考,您可以查看Java Language Specification

相关问题