jdk1.8 -- 自定义FunctionInterface

一.自定义函数的理解

  对于java提供的一些函数,用lambda表达式是可以解决一些问题的,但是在对于一些比较复杂的数据类型在处理时,可能会有些力不从心了,但是

我们可以通过自定义的一些函数,通过使用lambda的方式来执行,这样就可以节省不必要的麻烦。

二.自定义函数的过程

  1.定义原数据

  2.自定义FunctionInterface

  3.测试类

 

//原数据
public
class Persion { private String name; private Integer age; private Integer phoneNum; public Persion(String name, Integer age, Integer phoneNum) { this.name = name; this.age = age; this.phoneNum = phoneNum; } @Override public String toString() { return "Persion [name=" + name + ", firstName=" + firstName + ", lastName=" + lastName + ", address=" + address + ", age=" + age + ", phoneNum=" + phoneNum + "]"; } }
//定义FunctionInterface
@FunctionalInterface
public interface ConsumerPersion<A,B,C,D> { D create(A a,B b,C c); }
//在接口上添加FunctionInterface
//以表示该函数只有唯一的一个方法,在通过编译调用时,不会产生歧义
//测试类
public
class MainTest { public static void main(String[] args) { Persion persion = createPersion("张三",23,123,(a,b,c) -> new Persion(a,b,c)); System.out.println(persion); } public static Persion createPersion(String name,int age,int number,ConsumerPersion<String, Integer, Integer, Persion> cp){ return cp.create(name, age, number); } }
//定义调用函数
在ConsumerPersion这个泛型接口中定义了4种数据类型,A,B,C,D, 而函数create的定义是传入A,B,C,返回D,因此我们可以知道,D就是返回的Persion,而A,B,C则是persion
中包含的属性的数据类型,再通过构造函数,可以确定A,B,C的数据类型,分别是String,Integer,Integer,因此确定了泛型接口中泛型参数的数据类型,以及返回值
//执行流程
当执行createPersion()这个方法时,需要传入参数name,age,number,同时还有一个带有泛型的接口,当我们把正常的参数name,age,number传入后,对于这个泛型接口的传参
我们可以随便写3个变量代替,可推导出要返回的Persion,通过构造函数将3个变量传入。

三.对lambda函数使用的理解

对于函数lambda的的使用,其实就是匿名函数的应用推导的过程,我们要实现ConsumerPersion中的方法,最简单、最直接的就是写一个匿名函数来实现
new ConsumerPersion<String,Integer,Integer,Persion>(){
  @override
  public Persion create(String name,Integer age,Integer phoneNum){
    
      return new Persion(name,age,phoneNum);
  }
}
但是从jdk1.8之后,它对于这样的代码直接进行了优化,不需要写这样的代码,而是通过特殊字符来标识这样的代码
createPersion("张三",23,123,(a,b,c)-> new Persion(a,b,c))
当虚拟机加载到这段代码时,会通过这些特殊的标识符,并通过加载标记为@FunctionInterface 的函数,动态的生成相应的代码,以实现相对应的需求,
这样做的目的,大大的简化了开发者的工作量

 

posted @ 2019-08-02 11:05  硝烟漫过十八岁  阅读(1803)  评论(0编辑  收藏  举报