JAVA基础编程103——函数式接口《上》

一、什么是函数式接口?

  1. 有且仅有一个抽象方法,可以有多个非抽象方法的接口。

  2. 函数式接口可以被隐式转换为lambda表达式,同时对lambda表达式支持非常友好。

  3. 函数式接口可以用@FunctionalInterface注解标注。

二、用于什么样的场景?

  1. 适用于对条件和需求都明确,直接了当要做什么或者达到什么样的目的的场景。

  2. 理解:条件(有什么)和需求(干什么)抽取出来,过程(怎么干)先不谈。

三、解决了什么样的问题?

  1. 在特殊的场景中函数式编程思想解决了面相对象编程思想对类的高度依赖问题,让编程过程变得更简洁。

四、函数式编程如何实现?

1.自定义一个函数接口

package com.mollen.demo01;

/**
* @ClassName:  MyInterface
* @Auther:     Mollen
* @CreateTime: 2018-09-11  22:40:01
* @Description:
*              函数式接口:有且仅有一个抽象方法的接口
*              编程思想:需求====>结果
*
*/
@FunctionalInterface
public interface MyInterface {
  public abstract  void method();
}

2.便于理解和传统实现方式的比较,定义一个接口实现类

package com.mollen.demo01;
/**
* @ClassName:   MyInterfaceImpl
* @Auther:      Mollen
* @CreateTime:  2018-09-11  22:43:51
* @Description:
*              只是一个普通的接口实现类
*/
public class MyInterfaceImpl implements MyInterface {
   @Override
   public void method() {
       System.out.println("通过实现类来实现函数式接口!");
   }
}

3、定义一个测试类

package com.mollen.demo01;

/**
 1. @ClassName:  Test
 2. @Auther:     Mollen
 3. @CreateTime: 2018-09-11  22:41:52
 4. @Description:
 5.         A、 函数式接口实现方式:
 6.                  1、实现类
 7.                  2、匿名内部类
 8.                  3、lambda表达式(JDK8 特性)
 9.         B、lambda表达式:
 10.                  1、定义:有且仅有一个抽象方法的接口
 11.                  2、格式:()->{}
 12.                  3、简写:当()参数只有一个,{}只有一条语句,可省略参数和{}
 13.                     比如:()->System.out.print()
 */
public class Test {
    public static void main(String[] args) {
        /**
         * 1.接口实现类实现接口
         */
        show(new MyInterfaceImpl());

        /**
         * 2.匿名内部类实现接口
         */
        show(new MyInterface() {
            @Override
            public void method() {
                System.out.println("通过匿名内部类的方式实现函数式接口");
            }
        });

        /**
         * 3.lambda表达式实现函数式接口
         */
        show(()->System.out.println("lambda表达式实现函数式接口"));
    }

    /**
     *  函数式接口作为参数传递进行方法调用
     */
    public  static void show(MyInterface myInterface){
        myInterface.method();
    }
}

五、注意事项

  1. @FunctionalInterface注解是校验函数式接口的标志,按规范函数式接口都标注。

  2. 函数式接口可以有非抽象方法jdk1.8之后可以有静态方法(static)方法和默认(default)方法,jdk1.9以后可以有私有(private)方法。

  3. lambda表达式简化规则,后续再聊。

猜你喜欢

转载自blog.csdn.net/mollen/article/details/82673819