前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >03-Java8新特性 方法引用与构造器引用

03-Java8新特性 方法引用与构造器引用

作者头像
彼岸舞
发布2021-12-14 19:43:55
4340
发布2021-12-14 19:43:55
举报

方法引用

若 Lambda 体中的内容有方法已经实现了,我们可以使用方法引用

(可以理解为方法引用是 Lambda 表达式的另一种表现形式)

主要三种语法格式

对象::实例方法名

注意:需要函数式接口方法的入参和返回值 == 引用的对象方法的入参和返回值

代码语言:javascript
复制
@Test
public void test1(){
    Consumer consumer1 = s -> System.out.println(s);
    // 优化 对象::实例方法名
    // 1:这个是多写了一行,防止直接看不懂,下面才是简化的
    PrintStream out = System.out;
    Consumer consumer2 =out::println;
    // 简化
    Consumer consumer3 = System.out::println;
    consumer1.accept("hello world");
    consumer2.accept("hello world");
    consumer3.accept("hello world");
}
新建类
代码语言:javascript
复制
package com.dance.java8.entity;

import lombok.Data;

@Data
public class Person {

    private String name;
    
    private Integer age;

}
代码语言:javascript
复制
@Test
public void test3(){
    Person person = new Person();
    person.setName("flower");
    Supplier supplier = person::getName;
    System.out.println(supplier.get());
}

类::静态方法名

注意:需要函数式接口方法的入参和返回值 == 引用的对象方法的入参和返回值

代码语言:javascript
复制
@Test
public void test2(){
    Comparator comparator = Integer::compare;
}

类::实例方法名

注意:需要两个参数,左边参数作为调用者,右边参数作为入参,才可以使用类::实例方法名

代码语言:javascript
复制
@Test
public void test4(){
    BiPredicate<String,String> biPredicate1 = (x,y) -> x.equals(y);
    // 优化 类::实例方法名
    BiPredicate<String,String> biPredicate2 = String::equals;
}

构造器引用

注意:需要调用的构造器的参数列表与函数式接口中的抽象方法列表保持一致

代码语言:javascript
复制
@Test
public void test5(){
    Supplier supplier1 = () -> new Person();
    // 构造器引用优化
    Supplier supplier2 = Person::new;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法引用
  • 主要三种语法格式
    • 对象::实例方法名
      • 类::静态方法名
        • 类::实例方法名
        • 构造器引用
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档