java8方法引用,允许不可比较的返回类型
这是关于方法引用调用的,在lambda中,我们能够对具有不同返回类型的方法进行方法引用。请参阅下面的代码-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 {
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()
实现voidsay()
方法,其返回类型为boolean
我们如何证明这一点?我遗漏了什么吗?因为你也会写作
class SayableImpl implements Sayable {
@Override
public void say() {
new MethodReference().saySomething();
}
}
这就是最终在使用lambda表示它时所做的
Sayable sayable = () -> methodReference.saySomething()
但若您试图用不同的返回类型实现它,编译器会抱怨。这是否意味着如果我们使用lamda实现,规则会有一些变化?谢谢,但上面的实现将显示编译错误-“Void方法无法返回值”。请检查。@vinod注意,我没有在代码中添加
return
,因此它应该能够成功编译。