首页 > 其他 > 详细

函数接口

时间:2019-08-12 22:01:49      阅读:93      评论:0      收藏:0      [点我收藏+]

技术分享图片

前言

最近在项目中发现了同事写的代码,用到了很多Java8的特性,本篇就写关于函数式接口的;

正文

函数式接口

什么是函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为lambda表达式。Lambda表达式和方法引用(实际上也可认为是Lambda表达式)上。

函数式接口

可以将lambda表达式作为参数传入方法,并处理;

函数接口注解@FunctionalInterface

该注解主要起一个标记校验作用,在编译时校验该接口是否遵循函数式接口规则;
Java 不会强制要求你使用@FunctionalInterface注解来标记你的接口是函数式接口, 然而,作为API作者, 你可能倾向使用@FunctionalInterface指明特定的接口为函数式接口, 这只是一个设计上的考虑, 可以让用户很明显的知道一个接口是函数式接口。

未违反规则:


@FunctionalInterface
public interface TestFunc {
    void test();
}

违反规则:

技术分享图片

注解规则

  • 可以定义默认方法

技术分享图片

  • 允许定义静态方法

技术分享图片

  • 允许定义java.lang.Object里面的public方法

技术分享图片

jdk8之前已有的函数式接口

  • java.lang.Runnable
  • java.util.concurrent.Callable
  • java.security.PrivilegedAction
  • java.util.Comparator
  • java.io.FileFilter
  • java.nio.file.PathMatcher
  • java.lang.reflect.InvocationHandler
  • ava.beans.PropertyChangeListener
  • java.awt.event.ActionListener
  • javax.swing.event.ChangeListener

新定义的函数式接口

集中在java.util.function包下边;

  • Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t)
  • Consumer -- 传入一个参数,无返回值,纯消费。 方法为void accept(T t)
  • Function -- 传入一个参数,返回一个结果,方法为R apply(T t)
  • Supplier -- 无参数传入,返回一个结果,方法为T get()

自定义函数式接口

  1. 自定义函数式接口类:

@FunctionalInterface
public interface AnnotationFunc {
    /**
     * 注释执行方法回调
     */
    void callBack();
}
  1. 使用函数式接口类

public class TestTwo {
    public static void main(String[] args) {
        //赋值函数
        AnnotationFunc annotationFunc=()-> System.out.println("test");
        //调用方法执行
        annotationFunc.callBack();
    }
}
  1. 结果

test
Process finished with exit code 0

总结

这里大概的了解了Java8的函数式编程,可以将函数(lambda表达式)作为参数传递

参考资料

函数接口

原文:https://www.cnblogs.com/guoyuchuan/p/11342686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!