java方法引用

MethodReference

  • 前言
  • 特定对象方法引用
    • 函数接口
    • 特定对象所在类
    • 调用

前言

JDK1.8之后提供是Lambda,它可以让开发者自定义函数接口中抽象方法的实现,方法引用可以让开发者直接引用已存在的方法。
方法引用的形式:

  • 类::静态方法
  • 类::特定对象实例方法
  • 对象::实例方法
  • 类::new

特定对象方法引用

函数接口

public interface Encode<T> {
    void encode(T t);
}

特定对象所在类

public class Base {
    public void encrypt() {
        System.out.println("Base::speak");
    }
}
public class Derive extends Base{
    @Override
    public void encrypt() {
        System.out.println("Derive::speak");
    }
}

调用

按照规则,静态方法中只能调用静态方法,或者创建实例,通过实例来调用实例方法。但是我们用Base::encrypt好像是静态方法,但它实际是实例方法,此时就是类::特定对象实例方法。其实相当于实例调用实例方法。这个实例我们需要通过 函数接口的第一个参数传入。所以可以这么调用的,函数接口第一个参数的类型必须是被调用方法所在的类。这里就是函数接口的泛型T。也可以不要泛型,那么函数接口的方法第一个参数必须是Base

public class MethodReference {
    public static void main(String[] args) {
        Derive base = new Derive();
        Encode<Base> encode = Base::encrypt;
        //这里传入只要是Base类型/子类就会调用相应方法
        encode.encode(base);
        System.out.println(encode);
    }
}

你可能感兴趣的:(JDK,java,开发语言)