我读到在方法重载中,优先级为:
精确匹配>加宽>装箱/拆箱>可变参数
这对于只有一个参数的函数非常有用。但是对于具有多个参数的函数,这有时会产生奇怪的结果,大概是因为我无法正确应用这一规则。
例如:
代码 1:
public static void overloadResolve(long i,int j){} //1
public static void overloadResolve(int i,Integer o){} //2
overloadResolve(5,6); // calls 1
代码 2:
public static void overloadResolve(int i,int... j){} //1
public static void overloadResolve(Integer i,long o){} //2
overloadResolve(5,6); // calls 2
你能解释一下在重载的情况下如何处理多参数函数吗?
最佳答案
嗯,在第一种情况下,第一个方法有一个参数需要加宽,另一个参数需要精确匹配。第二种方法有一个参数完全匹配,另一个参数需要装箱。由于加宽优先于装箱,因此选择第一种方法。
在第二种情况下,第一种方法具有可变参数,而第二种方法需要装箱和加宽。由于加宽和装箱都优先于可变参数,因此选择第二种方法。
您可以举出不清楚选择哪种方法的示例:
public static void overloadResolve(long i,Integer j){} //1
public static void overloadResolve(Integer i,long o){} //2
overloadResolve(5,6);
在这种情况下,第一个方法优先于第一个参数,而第二个方法优先于第二个参数。因此编译器无法在它们之间进行选择,编译将失败。
关于java - 多参数重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26647902/