07 方法引用

本小节继续方法引用,即方法可以作为参数被传递,其与lambda联合使用 ,方法引用可以使语言的构造更加紧凑简洁,减少冗余代码。

1、方法引用的分类

  • 构造器引用
    Class::new对应lambda表达式:(args) -> new 类名(args)
  • 静态方法引用
    Class::static_method对应lambda表达式:(args) -> 类名.static_method(args)
  • 对象方法引用
    Class::method对应lambda表达式:(inst,args) -> 类名.method(args)
  • 实例方法引用
    instance::method对应lambda表达式:(args) -> instance.method(args)

2、测试代码


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

public class MethodReference {
    public static void main(String[] args) {

        //1构造器使用:   Class::new
        MethodReference mr = MethodReference.create(MethodReference::new);
        //lambda表达式写法
        MethodReference mr1 = MethodReference.create(()->new MethodReference());

        List<MethodReference> list = Arrays.asList(mr);
        //2静态方法引用 Class::static_method
        list.forEach(MethodReference::test1);
        //lambda表达式写法
        list.forEach((methodReference)->MethodReference.test1(methodReference));

        //3对象方法引用 Class::method
        list.forEach(MethodReference::test3);

        //4实例方法引用  instance::method
        MethodReference mr2 = MethodReference.create(MethodReference::new);
        list.forEach(mr2::test2);
        //lambda表达式写法
        list.forEach((methodReference)->mr2.test2(methodReference));

        //另外,我们也可以将 System.out::println 方法作为静态方法来引用。
        List<String> names = new ArrayList<String>();
        names.add("java");
        names.add("python");
        names.add("cpp");
        names.forEach(System.out::println);
    }

    public interface Student<T> {
        T get();
    }

    public static MethodReference create(Supplier<MethodReference> call) {
        return call.get();
    }

    public static void test1(MethodReference methodReference) {

        System.out.println("test1");
    }

    public void test2(MethodReference methodReference) {
        System.out.println("test2");
    }

    public void test3() {
        System.out.println("test3");
    }
}

以上就是jdk8中的方法引用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容