美文网首页
黑猴子的家:Java 8 -> 构造器引用

黑猴子的家:Java 8 -> 构造器引用

作者: 黑猴子的家 | 来源:发表于2019-03-03 08:14 被阅读5次
    1、概念

    格式:ClassName::new 与函数式接口相结合,自动与函数式接口中方法兼容。 可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象方法的参数列表一致!且方法的返回值即为构造器对应类的对象。

    2、样例

    Lambda表达式

    Function<Integer,MyClass> fun1 = n -> new MyClass(n);
    

    构造器引用

    Function<Integer,MyClass> fun2 = MyClass::new;
    
    3、案例
    package com.yinggu.demo8;
    import java.util.function.Function;
    import java.util.function.Supplier;
    import org.junit.Test;
    import com.yinggu.domain.Employee;
    
    * @author 黑猴子的家 
     * https://www.jianshu.com/u/37fd8e2dff4c
     * 此类用于演示构造器引用 
    特点:相当于代替了具备特殊要求的Lambda表达式作为函数式接口的实例 
    要求: 
     * 1.方法体中,仅仅就有一个语句而且是返回语句
     * 2.返回的是一个new 出来的对象 
     * 3.函数式接口的抽象方法的参数列表=对象构造器的参数列表+对象类型 语法: 类型::new
    
    public class TestConstructorRef {
          
          // 无参
          @Test
          public void test1() {
                
                // Lambda表达式
                Supplier<Employee> sup = () -> new Employee();
                
                // 构造器引用
                Supplier<Employee> sup2 = Employee::new;
          }
    
          // 一个参数
          @Test
          public void test2() {
                
                // Lambda表达式
                Function<String, String> fun = (str) -> new String(str);
                
                // 构造器引用
                Function<String, String> fun2 = String::new;
          }
    
          // 多个参数
          @Test
          public void test3() {
                
                // Lambda表达式
                MyInterface<Integer, String, Integer, Double, Employee> m = 
                            (id, name, age, salary) -> new Employee(id, name,
                                                                                        age, salary);
    
                // 构造器引用
                MyInterface<Integer, String, Integer, Double, Employee> m2 = Employee::new;
          }
    }
    
    interface MyInterface<T, R, U, E, K> {
          K operate(T t, R r, U u, E e);
    }
    

    相关文章

      网友评论

          本文标题:黑猴子的家:Java 8 -> 构造器引用

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