首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >10-方法引用

10-方法引用

作者头像
Ywrby
发布2022-10-27 13:22:26
发布2022-10-27 13:22:26
32600
代码可运行
举报
文章被收录于专栏:YwrbyYwrby
运行总次数:0
代码可运行

方法引用概述

目的

方法引用是为了进一步简化Lambda表达式的写法

格式

代码语言:javascript
代码运行次数:0
运行
复制
类型或对象::引用的方法  //关键语法  “::”

实例

代码语言:javascript
代码运行次数:0
运行
复制
package ComparatorDemo;

import java.util.ArrayList;
import java.util.List;

public class MethodDemo {
    public static void main(String[] args) {
        List<String> lists=new ArrayList<>();
        lists.add("first");
        lists.add("second");
        lists.add("third");
        //遍历列表,通过Lambda表达式的方法
        lists.forEach(s -> System.out.println(s));
        
        //方法引用(前提:必须形如上式前后的参数一致)
        lists.forEach(System.out::println);
    }
}

静态方法的引用

格式

代码语言:javascript
代码运行次数:0
运行
复制
类名::静态方法

简化步骤

定义一个静态方法,将需要简化的代码放到一个静态方法中去

注意事项

  • 被引用的方法的参数列表和函数式接口中的抽象方法的参数列表必须完全一致
  • 如果函数式接口中的抽象方法有返回值,则被应用的方法也必须有相同返回值
  • 如果函数式接口中的抽象方法没有返回值,则被应用的方法也可以有返回值,也可以没有
实例

首先在Student类中重写一个静态方法

代码语言:javascript
代码运行次数:0
运行
复制
//首先定义静态方法
public static int compareByAge(Student s1,Student s2){
    return s1.getAge()-s2.getAge();
}

然后利用静态方法的引用简化代码

代码语言:javascript
代码运行次数:0
运行
复制
package ComparatorDemo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ComparatorDemo1 {

    public static void main(String[] args) {
        List<Student> lists=new ArrayList<>();
        Student s1=new Student("Leslie",18,"Man");
        Student s2=new Student("John",14,"Man");
        Student s3=new Student("Gym",20,"Woman");
        //批量向数组插入数据
        Collections.addAll(lists,s1,s2,s3);
        //按照年龄进行排序(匿名内部类做法)
        Collections.sort(lists, (t1,t2)->Student.compareByAge(t1,t2));
        //使用静态方法进行简化,前后参数必须相同
        Collections.sort(lists,Student::compareByAge);

        for(Student stu:lists) {
            System.out.printf("name=%s age=%d sex=%s\n",stu.getName(),stu.getAge(),stu.getSex());
        }
    }
}

实例方法引用

格式

代码语言:javascript
代码运行次数:0
运行
复制
对象::实例方法

步骤

定义一个实力方法,把需要的代码放到实例中去

注意事项

被引用方法的参数列表和函数式接口的抽象方法的参数列表必须完全一致

实例

实例就是本节开头所引的System.out.println的简化写法

println本身是实例方法,out是输出流对象,并且前后参数完全一致,所以可以用方法引用简化

构造器引用

格式

代码语言:javascript
代码运行次数:0
运行
复制
类名::new 

注意

前后两个参数一致并且在创建对象的情况下就可以使用构造器引用

代码语言:javascript
代码运行次数:0
运行
复制
//前后参数一致,并在创建对象
s -> new Student(s);
//改写成引用
Student::new
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法引用概述
    • 目的
    • 格式
    • 实例
    • 静态方法的引用
      • 格式
      • 简化步骤
      • 注意事项
    • 实例方法引用
      • 格式
      • 步骤
      • 注意事项
      • 实例
    • 构造器引用
      • 格式
      • 注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档