java8方法引用,允许不可比较的返回类型

java8方法引用,允许不可比较的返回类型,java,lambda,java-8,functional-interface,Java,Lambda,Java 8,Functional Interface,这是关于方法引用调用的,在lambda中,我们能够对具有不同返回类型的方法进行方法引用。请参阅下面的代码- interface Sayable { void say(); } class SayableImpl implements Sayable { @Override public boolean say() { // error wrong return type } } public class MethodReference {

这是关于方法引用调用的,在lambda中,我们能够对具有不同返回类型的方法进行方法引用。请参阅下面的代码-

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();
    }
}
这里我们用
MethodReference::saySomething()
实现void
say()
方法,其返回类型为
boolean


我们如何证明这一点?我遗漏了什么吗?

因为你也会写作

class SayableImpl implements Sayable {
    @Override
    public void say() {
        new MethodReference().saySomething();
    }
}
这就是最终在使用lambda表示它时所做的

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

但若您试图用不同的返回类型实现它,编译器会抱怨。这是否意味着如果我们使用lamda实现,规则会有一些变化?谢谢,但上面的实现将显示编译错误-“Void方法无法返回值”。请检查。@vinod注意,我没有在代码中添加
return
,因此它应该能够成功编译。