Java 方法引用的介绍

(1)成员方法的介绍 

public class Demo {
    public static void printString(Printable p){
        p.print("aaa");
    }

    public static void main(String[] args) {
        //用于printString方法中传递的参数是一个函数式接口,所以可以使用Lambda表达式对参数进行传递
        printString(s->System.out.println(s));


        /*
        * 分析:
        * 在本案例中,Lambda表达式的目的就是传递需要打印的字符串
        * 把参数s,传递给了System.out对象,调用该对象中的方法println方法对参数进行输出
        * 注意;
        * (1)System.out对象已经存在
        * (2)println方法也已经存在
        * 所以我们可以使用方法引用来优化Lambda表达式
        * 可以使用System.out对象来直接引用out方法
        * */


        //使用方法引用来优化上述Lambda表达式
        printString(System.out::println);


        /*
        * 上式中,双冒号【::】为引用运算符,它所在的表达式为方法引用,如果Lambda表达式想要表达的函数方案已经存在于某个方法的实现中,那么可以通过双冒号来引用该方法,作为Lambda的替代则
        * 上式之前的Lambda表达式中,所重写的接口中的抽象方法的实现代码,在System.out对象中已经存在,即println方法,因此Lambda表达式完全可以由方法引用所替代,
        * 对比如下:
        * Lambda表达式:s->System.out.println(s);含义:拿到参数后,经过Lambda表达式将参数传递给接口的实现类进行处理,即使用System.out.println(s)进行打印
        } 方法引用的表达式:System.out::println 含义:直接用System.out对象中的println方法来替代Lambda表达式,实质上是复用其它类中现有的方法,避免了自己重写
        *
        * 注:Lambd表达式中传递的参数一定是方法引用中,被引用的方法可以接收的参数类型,否则会报错
        * */
    }

}

(2)函数式接口


@FunctionalInterface
public interface Printable {
    public abstract void print(String s);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章