参数中的 Java 类型提升
我偶然发现了这个片段:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
这将导致编译错误:
错误:(15, 9) java: 对 printSum 的引用是模棱两可的,两种方法 printSum(int,double) 在 ParamTest 中和方法 printSum(long,long) 在 ParamTest 匹配中都是不明确的
这怎么是模棱两可的?在这种情况下,不应该只提升第二个参数,因为第一个参数已经是一个int吗?在这种情况下,第一个参数不需要提升,对吧?
如果我更新代码以添加另一个方法,则编译成功:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
让我展开讨论,以澄清一下。下面的代码会导致多义性:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
那么下面的代码也会导致歧义:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
但是,这一个不会导致歧义:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, double b) {
System.out.println("In longDBL " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}