Я пытаюсь понять, почему компилируется следующий код:
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?