Java基础(8)方法引用

方法引用

​ 标准语法为 Classname::methodName

​ 需要注意的是,虽然这是一个方法,但不需要在后面加括号,因为这里并不调用该方法。

​ 我们只是提供了和 Lambda 表达式等价的一种结构, 在需要时才会调用。

​ 凡是使用 Lambda 表达式的地方,就可以使用方法引用。

1、方法引用符

双冒号::为引用运算符,而他所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在与某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。

2、通过对象名引用成员方法

interface A{
    void printS(String s);
}
public static void method(A s){    s.printS("你好呀");}

public static void main(String[] args) {
        method(s-> System.out.println(s));
        method(System.out::println);
}
语义分析
  • Lambda表达式写法:method(s-> System.out.println(s));

拿到参数之后经Lambda之手,继而传给System.out.println方法处理

  • 方法引用写法: method(System.out::println);

之恶让System.out中的println方法来取代Lambda。两种写法执行效果完全一样,而第二种方法引用的写法复用了已有的方法,更加简洁。

3、通过类名引用静态方法

interface MyInterface{
    int myAbs(int a);
}

public class demo01 {
    public static int method(int a,MyInterface myInterface){
        return myInterface.myAbs(a);
    }

    public static void main(String[] args) {
        int method = method(-10, (a) -> Math.abs(a));
        System.out.println(method);

        /*
            Math类是存在的
            abs静态方法也是存在的
            所以可以通过类名引用静态方法
        */

        //方法引用
        int method1 = method(-10, Math::abs);
        System.out.println(method1);
    }
}

4、通过super引用成员方法

如果存在继承关系,当Lambda表达式中需要出现super调用时,也可以使用方法引用进行代替

@FunctionalInterface
interface Inter{
    void sick();
}

class I{
    public void say(){
        System.out.println("多喝热水");
    }
}

class Friend extends I {
    @Override
    public void say(){
        System.out.println("???");
    }

    public void method(Inter i){
        i.sick();
    }

    public void show(){
        /*method(()->{
            I f = new I();
            f.say();
        });*/
        
        //method(()-> super.say());
        //方法引用
        /*
            使用super引用类的成员方法
            super是已经存在的
            父类成员方法say存在
            所以,可以使用
        * */
        method(super::say);
    }



    public static void main(String[] args) {
        Friend f1 = new Friend();
        f1.show();
        f1.say();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值