美文网首页
Java中的函数式接口

Java中的函数式接口

作者: 东方未白_ | 来源:发表于2019-05-28 19:06 被阅读0次

概念引入:函数式接口

定义:

  • 接口声明了@FunctionalInterface注解。
  • 某接口只有一个抽象方法,即使没有@FunctionalInterface注解,编译器依然将该接口看作函数式接口。
  • 函数式接口加上@FunctionalInterface注解的好处是编译器会检查该接口是否符合规则,预防不必要的错误(编译器:谁让你们愚蠢的人类老是写错别字)
  • 函数式接口重写父类的方法,比如Object的toString方法,不会计数进抽象方法的个数中

例子

//1.基本写法
@FunctionalInterface
interface InterfaceTest {
    void buling();
}

//2.下面这种写法就会编译不通过
@FunctionalInterface
interface InterfaceTest {
    void buling();
    void test();
}
//3.编译通过,toString方法并不计入数目
@FunctionalInterface
interface InterfaceTest {
    @Override
    String toString();
    void buling();
}
/*
 * @param <T> the type of the input to the operation
      //T是输入的操作类型,比如丢进来一个println方法,类型就是函数。
 * @since 1.8
 */
@FunctionalInterface
public interface Consumer<T> { //表示只进行消费,比如只进行打印,不需要返回值的情况。
    /**
     * Performs this operation on the given argument.
     * @param t the input argument
     */
    void accept(T t);
}

函数式接口的实例的创建方式:

that instances of functional interfaces can be created with
lambda expressions, method references, or constructor references.
ps.全部详情请参见 FunctionalInterface.java上的注释

函数式接口的实例创建方式有三种,分别是lambda表达式、方法引用和构造函数引用

为何函数式接口只能有一个抽象方法?

@FunctionalInterface
interface TestInterface {
    void OnlyMethod();//c.因为这个方法并不需要参数 ===> 跳转到d.
 // a.假设这里可以存在有一个AnotherMethod ===> 跳转到b.
}

class Test {
    void speak(TestInterface testInterface){
        System.out.println("Cat");
        testInterface.OnlyMethod();
        System.out.println("Dog");
    }

    public static void main(String[] args) {
        Test test = new Test();

//b.  那么此处 ()->{}的写法就不能成立,因为并不知道要调用哪个方法,所以只有接口内方法唯一,才可以直接调用
//d. 所以 ()->{}的小括号内就不需要传递参数
        test.speak(()->{
            System.out.println("------------");
        });
    }
}

相关文章

  • 12.函数式接口

    主要内容 自定义函数式接口 函数式编程 常用函数式接口 第一章 函数式接口 1.1 概念 函数式接口在Java中是...

  • 42 函数式接口

    函数式接口在Java中是有且只有一个抽象方法的接口,java中就是使用Lambda接口作为函数式接口 定义接口格式...

  • Java 8 函数式接口(二) 分析、归纳内置的函数式接口

    概述内置的函数式接口 注意:这里只讨论java.util.function包中的函数式接口。java.lang.R...

  • Java lambda表达式

    1. Java函数式接口 Java实现函数式编程的方式是函数式接口(functional interface),函...

  • java8函数式接口

    一、函数式接口 1、函数式接口在java中是指:有且仅有一个抽象方法的接口,函数式接口,即适用于函数式编程场景的接...

  • 2020-07-18函数式接口

    函数式接口概述 函数式接口:有且仅有一个抽象方法的接口java中的函数式编程体现的就是Lambda表达式,所以函数...

  • JAVA1.8新特性-函数式接口

    JDK1.8中引入了用于函数式编程的支持。java中的函数式接口指:有且只有一个方法的接口。函数式接口是适用于函数...

  • JavaSE-函数式编程接口

    [TOC] 第一章:函数式接口 1.1 函数式接口介绍 ​ 函数式接口在Java中是指:有且仅有一个抽象方法的...

  • Java 8 Function函数式接口

    Java 8 Function函数式接口 介绍 函数式接口其实就是一个抽象接口类,在Java 8之前已有的函数式接...

  • 函数式接口

    函数式接口:有且仅有一个抽象方法的接口 Java中的函数式编程体现就是lambda表达式,所以函数式接口就是可以适...

网友评论

      本文标题:Java中的函数式接口

      本文链接:https://www.haomeiwen.com/subject/osljtctx.html