package com.java8;
public class MethodReferenceExample {
public MethodReferenceExample() {
System.out.println("MethodReferenceExample.....");
}
public int display() {
System.out.println("in display");
return 1;
}
public static int read() {
System.out.println("in read");
return 10;
}
public static void main(String[] args) {
//point 1
MyInterface myIn = MethodReferenceExample::new;
myIn.show();
//point 2
MyInterface objectReference = new MethodReferenceExample()::display;
objectReference.show();
int value = objectReference.show(); //you can't assign this because show is void///
MyInterface staticReference = MethodReferenceExample::read;
staticReference.show();
}
}
interface MyInterface{
public void show();
default public int getvalue() {
return 10;
}
}
在第1点,我们可以使用:: new分配构造函数引用,但该接口未实现
在第2点,我们可以使用具有返回值为void的show方法来调用将返回值为int的显示方法,并且仍将其调用。这有多奇怪? 2个方法之间没有任何联系,但仍可以调用它,因为它具有相同数量的参数。为什么Java员工会进行此更改?我的意思是,此方法参考确实令人困惑,并且确实没有任何意义,没有正当的理由,那么为什么他们要进行这种令人困惑的更改?
再次在第2点中可以调用它,但是不能将返回值分配给int,因为调用方法是void,所以它不能将void转换为int,为什么会造成所有这些混乱呢?有人可以解释一下吗?我的大脑很难接受所有这些方法参考资料。
谢谢。
答案 0 :(得分:3)
在第2点,我们可以使用具有返回值为void的show方法来调用将返回值为int的显示方法,并且仍将其调用。这有多奇怪?
就像能够调用someList.add(something)
并忽略返回的值一样奇怪,就像List.add()
的返回类型为void一样。它不是无效的:它是布尔值,但是您并不关心返回值,因此您将其称为好像返回了void一样,而忽略结果。同样在这里。该接口定义了一个无需任何参数即可调用的方法。 display()
是这种方法。就这么简单。
为什么Java员工会进行此更改?
因为这是一个很好的更改,通常可以使代码更清晰,更高效。
此方法参考确实令人困惑,而且毫无意义
这确实很有意义,并且有充分的理由。您尚未了解它们的事实并不会使它们失去用处。