美文网首页
方法引用 ~ java8特性

方法引用 ~ java8特性

作者: 喏喏2021 | 来源:发表于2022-02-06 21:57 被阅读0次

1. 介绍

前面讲的lambda表达式,已经简化了匿名类的写法,而我们使用方法引用结合lambda表达,可以更加简化写法,
可以看一下下面的示例:

List<Integer> values = Arrays.asList(1,2);
 //lambda表达式写法
 values.forEach(v->System.out.println(v));
 //方法引用写法
 values.forEach(System.out::println);

2. 方法引用的类型

  1. 静态方法引用:类名::静态方法,代表(参数)->类名.静态方法名(参数)
  2. 构造方法引用:类名::new, 代表(参数)->new 类名(参数)
  3. 实例方法引用:对象::实例方法 代表(实例变量,参数)->实例变量.方法名(参数)
  4. 类方法引用 : 类名::类方法 代表(参数)->类名.方法名(参数)
  5. 数组构造引用:类名[]::new 代表(参数)->new 类名[]

3. 实例

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

class MyClass {
    private int a;
    MyClass(){
        System.out.println("init...");
    }
    MyClass(int a){
        this.a = a;
    }
    public static void testStatic(MyClass c){
        System.out.println("static method");
    }
    public int test(){
        System.out.println("test method");
        return 1;
    }
    public void testObj(MyClass c){
        System.out.println("testObj method");
    }
}

public class MethodRefeTest {
    
    public static void main(String[] args) {
        //构造方法引用
        Supplier<MyClass> c1 = MyClass::new;
        MyClass myClass = c1.get();
        List<MyClass> myClassList = Arrays.asList(myClass);
        //类方法引用
        myClassList.forEach(MyClass::test);
        //实例方法引用
        myClassList.forEach(myClass::testObj);
        //静态方法引用
        myClassList.forEach(MyClass::testStatic);
    }
}

注意:上面的方法引用代表的函数,需要和函数式接口的参数保持一致,不然编译的时候就会有提示错误,
实际上可以看出,方法引用也就是lambda表达式的简要书写形式。

相关文章

网友评论

      本文标题:方法引用 ~ java8特性

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