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

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值