方法引用

  • 把已经有的方法拿过来用, 当做函数式接口中抽象方法的方法体
  • 条件
    • 引用处必须是函数式接口
    • 被引用的方法必须已经存在
    • 被引用方法的形参和返回值需要跟抽象方法保持一致
    • 被引用方法的功能要满足当前需求
  • 方法引用符: ::

分类

  • 引用静态方法

    • 格式: 类名 : : 静态方法
    • 范例: Integer::parseInt
  • 引用成员方法

    • 格式: 对象 : : 成员方法
      • 其他类: 其他类对象 : : 方法名
      • 本类: this : : 方法名
      • 父类: super : : 方法名
  • 引用构造方法

    • 格式: 类名 : : new
    • 范例: Student::new
  • 其他调用方式

    • 使用类名引用成员方法
      • 格式: 类名 : : 成员方法
      • 范例: String::subString
      • 第三条条件变为: 被引用方法的形参, 需要跟抽象方法的第二个形参到最后一个形参保持一致, 返回值保持一致
      • 第一个参数: 表示被引用方法的调用者, 决定了可以引用哪些类中的方法. 在Stream流中, 第一个参数一般都表示流里面的每一个数据. 假设流里面的数据是字符串, 那么使用这种方式进行方法引用, 只能引用String这个类中的方法
      • 第二个参数到最后一个参数: 跟被引用方法的形参保持一致, 如果没有第二个参数, 说明被引用的方法需要是无参的成员方法
    • 引用数组的构造方法
      • 格式: 数据类型[] : : new
      • 范例: int[]::new
      • 细节: 数组的类型, 需要跟流中数据的类型保持一致