我正在尝试理解重载解析方法.
为什么这个含糊不清:
void func(double, int, int, double) {}
void func(int, double, double, double) {}
void main()
{
func(1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)
但这不是?
void func(int, int, int, double) {}
void func(int, double, double, double) {}
void main()
{
func(1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,有2个精确参数匹配,2个转换针对1个完全匹配和3个转换,在第二种情况下,有3个完全匹配,1个转换针对1个完全匹配和3个转换.
那么为什么一个模棱两可而一个不是?这里的逻辑是什么?
这只是一个练习,但我无法弄清楚这种模糊性:
private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + "ciao");
}
private static void flipFlop(String str, int i, int j) {
System.out.println(str + "hello");
}
public static void main(String[] args) {
flipFlop("hello", new Integer(4), 2004);
}
Run Code Online (Sandbox Code Playgroud)
它说:
对于类型Test,方法flipFlop(String,int,Integer)是不明确的
我猜想第二个参数将被解包为int,所以第二个flipFlop方法就是选择.