java - 多参数重载函数

标签 java overloading wrapper

我读到在方法重载中,优先级为:

精确匹配>加宽>装箱/拆箱>可变参数

这对于只有一个参数的函数非常有用。但是对于具有多个参数的函数,这有时会产生奇怪的结果,大概是因为我无法正确应用这一规则。

例如:

代码 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/

相关文章:

java - 如何将 javascript 变量传递给 jsp 文件 liferay

typescript - 重载不能仅因返回类型而异

c - 如何制作 Qt 线程包装器

java - 原始数据类型和包装数据类型的用法有何不同,包装数据类型的需求是什么?

java - 构建作为 HashMap 但在输入和输出上转换值的 Java Map 的正确方法是什么?

带有重音字符的 Java 属性文件

java - 如何在接收数组的 MySQL 列中指定数据类型?

java - UnsupportedAudioFileException 的解决方法?

c# - 是否可以重载窗体的 ShowDialog 方法并返回不同的结果?

language-agnostic - 函数重载的用途/优点是什么?