小编rir*_*zen的帖子

参数中的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将导致编译错误:

错误:(15,9)java:对printSum的引用不明确,在ParamTest中的方法printSum(int,double)和在ParamTest中的方法printSum(long,long)都匹配

这是如何模棱两可的?因为第一个参数已经是一个int,在这种情况下不应该仅提升第二个参数吗?在这种情况下,不需要推广第一个参数,对吗?

如果我更新代码以添加另一个方法,则编译成功:

public static void printSum(int a, long b) {
    System.out.println(String.format("%s, %s ", a, b)); …
Run Code Online (Sandbox Code Playgroud)

java java-8 type-promotion

20
推荐指数
2
解决办法
914
查看次数

标签 统计

java ×1

java-8 ×1

type-promotion ×1