函数式接口

Java8中引入了函数式接口的概念,它需要和Lambda表达式配合使用。函数式接口可以看作是用于声明Lambda表达式的“类型”,Lambda表达式可以创建函数式接口的对象。

函数式接口语法

只包含一个抽象方法的接口(Interface),这种接口就会被编译器视为函数式接口。和函数式接口方法声明的参数类型和返回值类型完全相同的Lambda表达式可以创建函数式接口的对象,如果Lambda表达式抛出受检查异常,那么这个异常也需要在函数式接口上进行声明。此外,我们应该在函数式接口上标注@FunctionalInterface注解(尽管从编译器角度这不是必须的),这样编译器可以帮我们检查它是否是一个函数式接口,如果其中编写了多个方法就不会通过编译,同时也提高了代码的可读性。

下面是使用函数式接口的例子。

package com.gacfox.demo;

@FunctionalInterface
public interface MyFunc {
    int func(int x, int y);
}
package com.gacfox.demo;

public class Main {
    public static void main(String[] args) {
        MyFunc func = (x, y) -> x * y;
        int result = func.func(2, 3);
        System.out.println(result);
    }
}

MyFunc.java代码中,我们声明了一个名为MyFunc的函数式接口,其中包含了一个func()方法。Main.java中,我们使用Lambda表达式创建了MyFunc的实例对象func,此时我们就可以调用func.func()方法了。我们可以注意到,函数式接口方法的参数和返回值是和Lambda表达式完全对应的。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。