Кто-нибудь понимает, почему следующий код будет компилироваться в 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 и ниже этот компилируется, и выбран метод put с параметром Object. В JDK 8 это невозможно скомпилировать, указывая, что метод put неоднозначен.
По-видимому, JDK 8 пропускает метод Object-parameter и находит последние два метода объекта-объекта и жалуется на них (т.е. если вы добавите другой метод put с некоторым другим типом параметра, компилятор переключится и начнет жаловаться новые последние два метода)
Это похоже на ошибку.