Ссылку на метод можно представить так:
Sayable sayable = new Sayable() {
@Override
void say() {
// Grab the body of the method referenced by the method reference,
// which is the following:
System.out.println("Hello, this is static method.");
}
}
Ссылка на метод действительна, потому что
- тип назначения - функциональный интерфейс
Sayable
(вы пытаетесь сохранить результат в типе Sayable
);и - подпись ссылки метода на
saySomething()
соответствует методу функционального интерфейса say()
, то есть параметры и возвращаемый тип match 1 .
Реализация метода say()
экземпляра Sayable
, называемого переменной sayable
, равна телу метода, к которому относится ссылка на метод относится к.
Так, как в комментариях говорит Дж. Б. Низет, say()
на самом деле реализовано .
1 Небольшая деталь: слово «совпадение» не совсем означает «равны».Например, если saySomething()
вернул int
, он все равно работал бы, хотя единственный метод целевого типа определяет тип возвращаемого значения void
.