package com.wuzhixin.methodreference;
import com.wuzhixin.java8.Employee;
import org.testng.annotations.Test;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class TestDemo {
/**
* 当lamdba体中的内容有方法已经实现了,我们可以使用"方法饮用"
*
* (可以理解为方法引用是lamdba表达式的另外一种形式)
*
* 三种语法格式
*
* 对象::实例方法名
* 类::静态方法名
* 类::实例方法名
*/
//类:实力方法名
@Test
public void testDemo3(){
/**
* 当第一个参数是实例方法调用者 第二个参数是实例方法参数时
* 就可以用 类:: 实例方法
*/
BiPredicate<String,String> biPredicate = (x,y)-> x.equals(y);
BiPredicate<String,String> biPredicate2 = String::equals;
System.out.println(biPredicate.test("ss", "sss"));
System.out.println(biPredicate2.test("sss", "sss"));
}
//类::静态方法名
@Test
public void testDemo2(){
Supplier<ExecutorService> supplier = Executors::newCachedThreadPool;
ExecutorService executorService = supplier.get();
System.out.println(executorService);
}
// 对象 :: 实例方法
@Test
public void testDemo1(){
/**
* 核心就是 函数式接口中方法的参数列表和返回值
* 和 引用方法的参数列表和返回值保持一致
* 相当于将 println 重载了accpet方法
*
* 其实底层是生成了一个静态内部类去调用方法
*
* 就是方法指针传递
*/
Consumer <String> consumer = System.out::println;
consumer.accept("ssssss");
}
/**
* 二:构造器饮用
*
* 格式:
* classname::new
*
* 构造器的参数列表与函数式接口中抽象方法的参数列表一致
*
*
*/
@Test
public void test5(){
Supplier<Employee> supplier= ()-> new Employee(1,"2",3.2);
Supplier<Employee> supplier1 = Employee::new;
}
}
java8新特性之方法引用
最新推荐文章于 2022-05-11 17:00:10 发布