zoukankan      html  css  js  c++  java
  • 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 的函数,动态的生成相应的代码,以实现相对应的需求,
    这样做的目的,大大的简化了开发者的工作量
  • 相关阅读:
    目标跟踪学习笔记1
    求职笔记
    Pycharm使用问题小结-002
    Pycharm使用问题小结-001
    Python基础练习-004-百变乘法表
    Python基础练习-003-求100-999之间所有的水仙花数
    Python基础练习-002-求1000以内的完全数
    Python基础练习-001-猜数字小游戏
    java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)(转)
    Jmeter
  • 原文地址:https://www.cnblogs.com/MrRightZhao/p/11287353.html
Copyright © 2011-2022 走看看