有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

重载可以指定哪个重载函数在Java中运行吗

鉴于这些方法:

String[] foo(int i){#doSomething;}

String[] foo(double i){#doesSomethingDifferent;}

可以写foo(int i){return foo(double d);} 这样它就不会运行递归foo(int i){return foo(int i);}

虽然我知道这无论如何都不会被推荐,但我正在寻找什么机制可以允许或不允许它


共 (3) 个答案

  1. # 1 楼答案

    你可以试试String[] foo(int i){return foo((double) i);}。通过这种方式,您可以显式地告诉编译器从foo(int i)调用foo(double d)。因此不会进行递归调用

    在重载的情况下,当使用某个参数调用某个方法时,编译器会尝试找到最适合所传递参数的方法。在您的情况下,如果只调用String[] foo(int i){return foo(i);},将调用foo(int i)版本,因为它最适合传递的参数(类型为int)。这就是为什么要调用double版本的foo,您必须明确地告诉编译器,传递的参数是double类型

  2. # 2 楼答案

    通过传递实际参数隐式指定将被调用的方法

    foo(int i) { return foo(1d); /*it will call foo(double i)*/ }
    foo(int i) { return foo(1); /*recursive call*/ }
    
  3. # 3 楼答案

    它应该自动发生。重载背后的想法是,方法签名不应该完全相同,尤其是方法参数。当您传入一个double值作为参数时,它将调用foo(double d)。当您传入一个int作为参数时,它将调用foo(int i)。为了确保调用double方法,可以使用(double)xx转换为double,其中x是整数)