Ссылка на метод java8, разрешающая несовместимый тип возврата - PullRequest
0 голосов
/ 23 октября 2019

Это касается вызова ссылки на метод, в лямбде мы можем сделать ссылку на метод, имеющий другой тип возвращаемого значения. См. Ниже код -

interface Sayable {
    void say();
}

class SayableImpl implements Sayable {

    @Override
    public boolean say() {
        // error wrong return type
    }
}

public class MethodReference {
    public static boolean saySomething() {
        System.out.println("Hello, this is static method.");
        return true;
    }

    public static void main(String[] args) {
        MethodReference methodReference = new MethodReference();
        Sayable sayable = () -> methodReference.saySomething();
        sayable.say();

        // Referring static method
        Sayable sayable2 = MethodReference::saySomething;
        sayable2.say();
    }
}

Здесь мы реализуем метод void say() с MethodReference::saySomething(), тип возвращаемого значения которого boolean.

Как мы это оправдываем? Я что-то упустил?

1 Ответ

1 голос
/ 23 октября 2019

Потому что вы также можете написать

class SayableImpl implements Sayable {
    @Override
    public void say() {
        new MethodReference().saySomething();
    }
}

, что в конечном итоге вы и сделаете, представляя его с помощью лямбды

Sayable sayable = () -> methodReference.saySomething()
...