Java 8: Reference to [method] is ambiguous Java 8:[method] 的引用不明确。

14 浏览
0 Comments

Java 8: Reference to [method] is ambiguous Java 8:[method] 的引用不明确。

有人知道为什么以下代码在Java 7及以下版本中可以编译通过,但在Java 8中会失败吗?

public static void main(String[] args) throws Exception {
    put(get("hello"));
}
public static  R get(String d) {
    return (R)d;
}
public static void put(Object o) {
    System.err.println("Object " + o);
}
public static void put(CharSequence c) {
    System.err.println("CharSequence " + c);
}
public static void put(char[] c) {
    System.err.println("char[] " + c);
}

get方法具有泛型返回类型。在JDK 7及以下版本中,这可以编译通过,并选择具有Object参数的put方法。但在JDK 8中,无法编译通过,提示put方法存在歧义。

显然,JDK 8跳过了具有Object参数的方法,并找到了最后两个子Object参数方法并对它们进行了投诉(即,如果您添加另一个具有其他参数类型的put方法,编译器将切换并对新的最后两个方法进行投诉)。

这似乎是一个bug。

0