重载可以指定哪个重载函数在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);}
虽然我知道这无论如何都不会被推荐,但我正在寻找什么机制可以允许或不允许它
你可以在下面搜索框中键入要查询的问题!
鉴于这些方法:
String[] foo(int i){#doSomething;}
String[] foo(double i){#doesSomethingDifferent;}
可以写foo(int i){return foo(double d);}
这样它就不会运行递归foo(int i){return foo(int i);}
虽然我知道这无论如何都不会被推荐,但我正在寻找什么机制可以允许或不允许它
# 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 楼答案
通过传递实际参数隐式指定将被调用的方法
# 3 楼答案
它应该自动发生。重载背后的想法是,方法签名不应该完全相同,尤其是方法参数。当您传入一个
double
值作为参数时,它将调用foo(double d)
。当您传入一个int
作为参数时,它将调用foo(int i)
。为了确保调用double
方法,可以使用(double)x
将x
转换为double
,其中x
是整数)