zoukankan      html  css  js  c++  java
  • Java 之 函数式接口

    函数式接口

    一、概念

      函数式接口在 java 中是指:有且仅有一个抽象方法的接口。

      函数式接口,即适用于函数式编程场景的接口。 Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。

      Tips语法糖是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是语法糖。从应用层面来讲,Java中的Lambda可以被当做是匿名内部
    类的语法糖,但是二者在原理上是不同的。

    二、格式

      只要确保接口中有且仅有一个抽象方法即可。

      语法格式:

    修饰符 interface 接口名称 {
        public abstract 返回值类型 方法名称(可选参数信息);
        // 其他非抽象方法内容
    }
    

        由于接口当中抽象方法的 public abstract 是可以省略的,所以定义函数式接口很简单:

    public interface MyFunctionalInterface {
        void myMethod();
    }

    三、@FunctionalInterface 注解

      与 @Override 注解的作用类似,Java8中专门为函数式接口引入了一个新的注解:@FunctionalInterface。

      该注解可用于一个接口的定义上:

    @FunctionalInterface
    public interface MyFunctionalInterface {
        void myMethod();
    }
    

      一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。

      需要注意的是,即使不适用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口,使用起来都一样。

    四、自定义函数式接口

      对于刚刚定义好的 MyFunctionInterface 函数式接口,典型使用场景就是作为方法的参数:

     1 public class DemoFunctionalInterface {
     2         // 使用自定义的函数式接口作为方法参数
     3         private static void doSomething(MyFunctionalInterface inter) {
     4             inter.myMethod(); // 调用自定义的函数式接口方法
     5         }
     6 
     7         public static void main(String[] args) {
     8             // 调用使用函数式接口的方法
     9             doSomething(() ‐ > System.out.println("Lambda执行啦!"));
    10         }
    11     }
  • 相关阅读:
    Myeclipse 10.7 android(安卓) 开发环境搭建
    matplotlib
    tophat cufflinks cuffcompare cuffmerge 的使用
    shell 随机从文件中抽取若干行
    liftover的使用/用法
    命令行运行R语言脚本(代码)
    R: NULL, NA, and NaN
    SOME USEFUL MACHINE LEARNING LIBRARIES.
    Flutter实战:手把手教你写Flutter Plugin
    Flutter学习笔记(五)
  • 原文地址:https://www.cnblogs.com/niujifei/p/11614081.html
Copyright © 2011-2022 走看看