Я пытаюсь понять, почему компилируется следующий код:
public class MethodRefs {
public static void main(String[] args) {
Function<MethodRefs, String> f;
f = MethodRefs::getValueStatic;
f = MethodRefs::getValue;
}
public static String getValueStatic(MethodRefs smt) {
return smt.getValue();
}
public String getValue() {
return "4";
}
}
Я вижу, почему первое присваивание действительно - getValueStatic
явно соответствует указанному типу Function
(он принимает объект MethodRefs
и возвращает String
), но второй меня озаряет - getValue
метод не принимает аргументов, так почему все еще допустимо назначить его f
?