Lambda表达式(四)方法引入

2022-06-14 20:24:47 浏览数 (1)

方法引入:

什么是方法引入?

方法引入:需要结合lambda表达式能够让代码变得更加精简。

  1. 匿名内部类使用
  2. Lambda调用匿名内部类
  3. 方法引入

方法引入的四大分类

  1. 静态方法引入 类名::(静态)方法名称
  2. 对象方法引入 类名:: 实例方法名称
  3. 实例方法引入 new对象 对象实例::方法引入
  4. 构造函数引入 类名::new

1. 静态方法引入 类名::(静态)方法名称

代码语言:javascript复制
  public static void main(String[] args) {
        //静态方法引入
        TestInterface testInterface=Test017::getName;
        System.out.println(testInterface.getName("静态方法引入"));
    }

    public static String getName(String name){
        return name;
    }
代码语言:javascript复制
@FunctionalInterface
public interface TestInterface {

    String getName(String name);
}
代码语言:javascript复制
注意点:静态方法的参数和返回值需要与函数接口的方法参数保持一致

2. 对象方法引入 类名:: 实例方法名称

代码语言:javascript复制
public class Test017 {

    public static void main(String[] args) {
        //对象方法引入引入
        TestInterface testInterface=Test017::getName;
        System.out.println(testInterface.getName(new Test017()));
    }

    public String getName(){
        return "对象方法引入";
    }
}

函数接口

代码语言:javascript复制
@FunctionalInterface
public interface TestInterface {

    String getName(Test017 test017);

}

​ 注意点:函数接口的参数是对象,函数接口和调用目标方法返回值一致,参数不一致

3. 实例方法引入 new对象 对象实例::方法引

代码语言:javascript复制
public class Test017 {

    public static void main(String[] args) {
        //实例方法引入
        Test017 test017 = new Test017();
        TestInterface testInterface=test017::getName;
        System.out.println(testInterface.getName("实例方法引入"));
    }

    public String getName(String name){
        return name;
    }
}

函数接口:

代码语言:javascript复制
@FunctionalInterface
public interface TestInterface {

    String getName(String name);
}

注意点:函数接口返回值和参数和方法保持一致

4. 构造函数引入 类名::new

代码语言:javascript复制
public class Test017 {

    public static void main(String[] args) {
        //构造函数方法引入
        TestInterface testInterface=UserEntity::new;
        System.out.println(testInterface.getName("构造函数方法引入"));
    }

}

函数接口:

代码语言:javascript复制
@FunctionalInterface
public interface TestInterface {

    UserEntity getName(String name);

}

实体:

代码语言:javascript复制
public class UserEntity {
    private String userName;
    private int age;

    public UserEntity() {

    }

    public UserEntity(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }

    public UserEntity(String userName) {
        this.userName = userName;
    }

    public UserEntity(int age) {
        this.age = age;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserEntity{"  
                "userName='"   userName   '''  
                ", age="   age  
                '}';
    }
    
}

注意点:构造方法的参数要和函数接口的参数保持一致,函数接口的多返回值和构造函数一致

0 人点赞