JDK8-方法引用

一、介绍       

         我们用Lambda表达式来实现匿名方法。但有些情况下,我们用Lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作,在这种情况下,我们倾向于通过方法名来调用它,而Lambda表达式可以帮助我们实现这一要求,它使得Lambda在调用那些已经拥有方法名的方法的代码更简洁、更容易理解。

        方法引用可以理解为Lambda表达式的另外一种表现形式。方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

  • 方法引用通过方法的名字来指向一个方法。
  • 方法引用使用一对冒号 :: 。
  • ​方法归属者::方法名

eg:1、遍历List,我们只get一次Age属性。2、遍历打印Person数组

// lambda写法
personList.forEach( p -> p.getAge());
//方法引用写法
personList.forEach(Person::getAge);

// lambda写法
Arrays.stream(array).forEach(p-> System.out.println(p));
// 方法引用写法
Arrays.stream(array).forEach(System.out::println);

二、四种方法引用类型

类型

语法

对应的Lambda表达式

举例

有参静态方法的

方法引用

Class::staticMethod

(t) -> 类名.staticMethod(t)

carList.forEach(Car::stop);

特定类的任意对象的方法引用

Class::method

(inst,arg) -> inst.method(arg)

carList.forEach(Car::run);

特定对象的

方法引用

instance::instMethod

() -> obj.method()

FixFactory fixF=new FixFactory();

carList.forEach(fixF::fix)

构造器的

方法引用

Class::new

(args) -> new 类名(args)

Supplier<Car> su =()->new Car();

Car car = su.get();

Supplier<Car> su = Car::new;

Car car = su.get();

三、代码详细示例 

@Data
public class Car {
    private String name;

    public Car() {
    }

    public Car(String name) {
        this.name = name;
    }


    public void run(){
        System.out.println("跑跑");
    }

    public static void stop(Car car){
        System.out.println(car.getName()+"停车");
    }
}

 

public class CarFixFactory {
    public void fix(Car car) {
        System.out.println(car.getName() + "汽车正在修理。。。");
    }
}

test

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值