Java 8 Java8方法::引用非常混乱

Java 8 Java8方法::引用非常混乱,java-8,method-reference,Java 8,Method Reference,在这里,在第1点,我们可以使用::new分配构造函数引用,但该接口并没有实现它 在第2点中,我们可以使用返回值为void的show方法调用返回值为int的display方法,但它仍然调用该方法。这有多奇怪?两个方法之间没有联系,但它仍然可以调用,因为它有相同数量的参数。为什么java人做出了这种改变?我的意思是,这个方法引用真的很混乱,真的没有意义,没有有效的理由,那么他们为什么要引入这个混乱的更改呢 在第2点中,我们可以调用它,但不能将返回值赋给int,因为调用方法是void的,所以它不能将v

在这里,在第1点,我们可以使用::new分配构造函数引用,但该接口并没有实现它

在第2点中,我们可以使用返回值为void的show方法调用返回值为int的display方法,但它仍然调用该方法。这有多奇怪?两个方法之间没有联系,但它仍然可以调用,因为它有相同数量的参数。为什么java人做出了这种改变?我的意思是,这个方法引用真的很混乱,真的没有意义,没有有效的理由,那么他们为什么要引入这个混乱的更改呢

在第2点中,我们可以调用它,但不能将返回值赋给int,因为调用方法是void的,所以它不能将void转换为int,真的,为什么会出现这种混乱?有人能给我解释一下吗?我的大脑很难接受所有这些方法参考的东西

提前谢谢

在第2点中,我们可以使用返回值为void的show方法调用返回值为int的display方法,但它仍然调用该方法。这有多奇怪

就像能够调用,例如,
someList.add(something)
并忽略返回值一样奇怪,就像
List.add()
的返回类型是空的一样。它不是void:它是布尔值,但是您不关心返回值,所以您调用它就像它返回void一样,只是忽略结果。彼此彼此。接口定义了一个无需任何参数即可调用的方法
display()
就是这样一种方法。就这么简单

为什么java人做出了这种改变

因为这是一个很好的改变,经常使代码更清晰,也更高效

这个方法引用非常混乱,毫无意义


这确实很有道理,而且有很多理由。您还不了解它们的事实并不会使它们变得不那么有用。

这就是方法引用的美妙之处,您只需要匹配签名。我喜欢list.add的第一个示例。U说:“这很有道理,也有很多理由。”所以你能举个例子吗?我问这个问题并不是因为诅咒某些API,而是因为我想真正理解它的重要性,而我还没有完全理解它。
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;
    }
}