java8新特性 函数接口与接口的默认方法静态方法

一、函数接口

    函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
    函数式接口可以被隐式转换为lambda表达式。
    在开发中,函数式接口非常脆弱:只要开发者在该接口中多添加一个方法,则该
接口就不再是函数式接口进而导致编译失败。为了克服这种代码层面的脆弱性,并显式
说明某个接口是函数式接口,Java 8 提供了一个特殊的注解@FunctionalInterface
如下:
@FunctionalInterface//注解显示声明该接口是函数式接口
public interface FeaturesOfDefaultInterface {

   void method();

 }

二、接口的默认方法与静态方法

  • 接口的默认方法

         接口的默认方法不会破坏函数接口的定义,默认方法和抽象方法之间的区别在于抽象方法需要实现,
     而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写。接口可以有多个默认方法。默
     认方法由关键字default修饰,这个关键字是Java8中新增的,为的目的就是使得某一些接口,原则上只有
     一个方法被实现,但是由于历史原因,不得不加入一些方法来兼容整个JDK中的API,所以就需要使用default
     关键字来定义这样的方法
    
  • 接口的静态方法 :

    函数式接口中可以有静态方法,一个或者多个静态方法不会影响接口成为函数式接口。
    
/**
 * @Description : java8新特性之 函数式接口
 *     函数接口指的是只有一个函数的接口,这样的接口可以隐式转换为Lambda表达式。
 * 在实践中,函数式接口非常脆弱:只要某个开发者在该接口中添加一个函数,则该
 * 接口就不再是函数式接口进而导致编译失败。为了克服这种代码层面的脆弱性,并
 * 显式说明某个接口是函数式接口,Java 8 提供了一个特殊的注解@FunctionalInterface
 * @Author : 高冷的美男子
 * @Date : Created in 11:53 2018/3/21
 */
@FunctionalInterface//注解显示声明该接口是函数式接口
public interface FeaturesOfDefaultInterface {

   void method();

   /**
    * @Description : java8 新特性之接口的默认方法
    *     接口的默认方法不会破坏函数式接口的定义,默认方法和抽象方法
    * 之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默
    * 认方法会被接口的实现类继承或者覆写
    * @Author : 高冷的美男子
    * @Date : Created in 13:30 2018/3/21
    */
  default String  defaultMethod(){

      return "this is default method";
  }
  /**
   * @Description : java8新特性之接口的静态方法
   * @param supplier : Supplier是java8中新增的函数式接口 Supplier 接口返回一个任意泛型的值
   * @Author : 高冷的美男子
   * @Date : Created in 15:10 2018/3/23
   */
  static FeaturesOfDefaultInterface create(Supplier supplier){

      return supplier.get();
  }

}

参考博客:
1.https://www.cnblogs.com/ownraul/p/5551545.html
2.https://www.cnblogs.com/xingzc/p/6002873.html

你可能感兴趣的:(java基础,Java8新特性,函数接口,接口静态方法,接口默认方法)