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

Is it possible to specify which overloaded function runs in 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);} ?

虽然我知道无论如何都不会推荐这样做,但我正在寻找哪些机制允许或禁止它?

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

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

foo(int i) { return foo(1d); /*it will call foo(double i)*/ }
foo(int i) { return foo(1); /*recursive call*/ }

你可以试试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 类型)。这就是为什么要调用 foodouble 版本,您必须明确告诉编译器传递的参数是 double.

类型