Java 8:对 [方法] 的引用不明确
有没有人理解为什么下面的代码在Java 7及以下版本中编译良好,但在Java 8中却失败了。
public static void main(String[] args) throws Exception {
put(get("hello"));
}
public static <R> 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 方法,编译器将切换并抱怨新的最后两个方法)
这似乎是一个错误。