是否可以指定在 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
类型)。这就是为什么要调用 foo
的 double
版本,您必须明确告诉编译器传递的参数是 double
.
类型
给定方法:
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
类型)。这就是为什么要调用 foo
的 double
版本,您必须明确告诉编译器传递的参数是 double
.