Java8 - 学习功能接口教程与实例

102 阅读2分钟

Java 8 特性 - 功能界面简介

功能性接口是Java 8中引入的新概念。

从名字上看,它是一个只包含抽象方法的接口。 这个接口的实例是由lambda表达式、方法引用和构造器引用创建的。这是在Java 8中引入的函数式编程的概念。在Java 8中,它允许创建一个自定义的函数式接口,以及由Java 8提供的内置函数式接口。

特点

  • 它只包含单一的抽象方法,提出单一的功能
  • 可以声明许多默认和静态方法
  • 可以声明对象类的方法
  • 它可以扩展非功能接口
  • 它可以扩展另一个没有任何抽象方法的接口

@FunctionalInterface注解示例

这是为函数式接口引入的一个新注解。它将接口标记为函数式编程。它可以用来在编译阶段检查代码。这个注解并不是必须使用的,你仍然可以在lambda表达式中使用这些接口。

自定义函数接口示例

这是一个创建我们自己的自定义函数接口的例子。
通过注释@FunctionalInterface 创建了MultiplyFunctionalInterface,它只有一个抽象的方法,没有提供实现 写了lambda表达式来实现Functional接口

public class FunctionalInterfaceExample {  
 public static void main(String[] args) {  
  MultiplyFunctionalInterface mfi = (value1, value2) -> value1 * value2;  
  System.out.println(mfi.multiply(5, 6));  
  
 }  
}  
  
@FunctionalInterface  
interface MultiplyFunctionalInterface {  
 public Integer multiply(Integer value1, Integer value2);  
}  

预定义的功能接口示例

这是一个使用现有功能接口的例子。LongBinaryOperator是java.util.function包中的一个功能接口。在下面的例子中使用了applyAsLong方法。

import java.util.function.LongBinaryOperator;  
public class InbuiltFunctionExamle {  
   public static void main(String args[]) {  
        LongBinaryOperator add = (value1, value2) -> value1+ value2;  
        System.out.println(add.applyAsLong(5, 400));  
  
    }  
}  

功能性接口示例

我们将看到有效和无效的功能接口例子

有效的功能接口例子

下面的例子是一个有效的功能接口,一个方法是单一的抽象方法toString,Object类中的equals可以被覆盖。

@FunctionalInterface  
 interface MyInterface {  
      int method(int a, int b);  
      @Override  
      public String toString();    
      @Override  
      public boolean equals(Object obj);   
 }  

无效的功能接口示例

下面的例子是无效的功能接口,在编译时抛出错误'Invalid '@FunctionalInterface' annotation; is not a functional interface' 下面的接口有两个抽象方法,只允许有一个抽象方法。

@FunctionalInterface  
interface InvalidFunctionalInterface {  
 public Integer method(Integer value1, Integer value2);  
 public Integer method1(Integer value1, Integer value2);  
}  

这个函数式接口正在扩展另一个非函数式接口,它有一个抽象方法。如果它上面没有抽象方法,它应该是有效的。

interface NonFunctionalInterface{    
    void method();     
}    
@FunctionalInterface    
interface FunctionalInterfaceHello extends NonFunctionalInterface{    
    void method1();    
}