美文网首页Java高级技术
JDK8新特性之方法引用

JDK8新特性之方法引用

作者: Java技术栈 | 来源:发表于2017-10-09 09:01 被阅读0次

什么是方法引用

方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用。

如:

List<String> list = Arrays.asList("a","b","c");
list.forEach(str -> System.out.print(str));
list.forEach(System.out::print);

上面两种写法是等价的。

方法引用分类

1、构造器方法引用

格式:Class::new,调用默认构造器。

2、类静态方法引用

格式:Class::static_method

3、类普通方法引用

格式:Class::method,方法不能带参数。

4、实例方法引用

格式:instance::method

示例

往User类添加方法引用方法:

public static User create(Supplier<User> supplier){
    return supplier.get();
}

public static void updateUsername(User user){
    user.setUsername(user.getUsername() + " updated.");
}

public void updateAge(){
    this.setAge(this.getAge() + 10);
}

public void changeAge(User user){
    user.setAge(user.getAge() + 10);
}

方法引用测试:

public static void main(String[] args) {
    List<User> list = initList();

    // 1、构造器方法引用
    User newUser = User.create(User::new);
    newUser.setAge(1);
    newUser.setUsername("new");
    System.out.println(newUser);

    // 2、类静态方法引用
    list.forEach(User::updateUsername);

    // 3、类普通方法引用
    list.forEach(User::updateAge);

    // 4、实例方法引用
    User user = new User();
    list.forEach(user::changeAge);

    list.forEach(System.out::println);
}

private static List<User> initList() {
    List<User> list = new ArrayList<>();
    list.add(new User("oaby", 23));
    list.add(new User("tom", 11));
    list.add(new User("john", 16));
    list.add(new User("jennis", 26));
    list.add(new User("tin", 26));
    list.add(new User("army", 26));
    list.add(new User("mack", 19));
    list.add(new User("jobs", 65));
    list.add(new User("jordan", 23));
    return list;
}

输出结果:

User [username=new, age=1]
User [username=oaby updated., age=43]
User [username=tom updated., age=31]
User [username=john updated., age=36]
User [username=jennis updated., age=46]
User [username=tin updated., age=46]
User [username=army updated., age=46]
User [username=mack updated., age=39]
User [username=jobs updated., age=85]
User [username=jordan updated., age=43]

可以看出方法引用都生效了,username和age都相应更新了。


更多干货推荐

1.史上最强 Java 中高级面试题整理

2.史上最强 Spring Boot & Cloud 教程整理

3.史上最强架构设计分布式技术干货整理

给大家送福利了,扫码关注Java技术栈微信公众号,在后台回复:666,可免费获取我最新整理的架构师学习资料,都是个人收藏学习的。

扫码关注Java技术栈微信公众号

相关文章

  • JDK8新特性之方法引用

    什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用。 如:...

  • JDK8新特性 方法引用

    1. Lambda的冗余场景 首先可以直接调用getSum方法就可以完成这个操作了。 而方法引用更简洁 其实方法引...

  • jdk8新特性-方法引用

    简单实例,解决Lambda表达式的冗余 定义函数式接口 调用函数式接口 使用对象名引用成员变量 函数式接口 创建对...

  • JAVA 8 新增特性之Lambda表达式+方法引用

    原文地址:JAVA 8 新增特性之Lambda表达式+方法引用 JDK8 已经发布了有几年了,但平时很少会用到新增...

  • java stream使用指南-------sorted使用及进

    引入 用了一段时间的jdk8的新特性,lambda表达式、方法引用、stream流,用起来是真的顺手啊,最近碰到了...

  • JDK8新特性介绍

    JDK8新特性介绍 JDK8新特性:​ 1,Lambda表达式​ 2,新的日期API​ 3,引入Optional​...

  • java9的新特性

    1、Java9 新特性之---目录结构 包含jdk8及以前的jdk版本,所有目录结构以及目录含义如图: 这个新特性...

  • C++学习笔记

    基本知识 右值引用C++11新特性,在出现右值引用之前,只有左值可以被引用,方法为&(例如int& a)。与之对应...

  • JDK8中的stream.reduce方法

    作为JDK8新特性之一,stream引入了许多新的方法,reduce就是其中一种。 Reduction 操作 首先...

  • Java自学-接口与继承 默认方法

    默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能...

网友评论

    本文标题:JDK8新特性之方法引用

    本文链接:https://www.haomeiwen.com/subject/naggextx.html