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

时间:2016-04-07 15:15:41

标签: java overloading signature

鉴于方法:

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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您可以尝试String[] foo(int i){return foo((double) i);}。这样您就明确告诉编译器从foo(double d)调用foo(int i)。所以不会进行递归调用。

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

答案 2 :(得分:2)

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

for _ in op.0.characters {

       self.calc.add(Int(nr1)!, secondNumber: Int(nr2)!)

}