定义
有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
可以在任意函数式接口上使用
@FunctionalInterface
注解,以检查它是否是一个函数式接口
意义
Lambda表达式配合函数式接口可以写出更加简洁、灵活的代码
简单示例
需求:使用函数式接口和 Lambda 表达式实现对字符串的处理功能。
先定义一个函数式接口
...
@FunctionalInterface
public interface MyStrFunc<T> {
// 核心方法
void accept(T t);
// 默认方法(可以省略)
default void defaultFunc() {
System.out.println("不会影响到函数式接口的定义");
}
// 静态方法(可以省略)
static void staticFunc(){
System.out.println("不会影响到函数式接口的定义");
}
}
接着定义字符串处理方法并测试其功能
...
public class TestDemo {
/** 测试 */
public static void main(String[] args) {
// 输出字符串长度
handleString("123456", s -> {System.out.println(s.length());});
// 输出拼接后的字符串
handleString("123456", s -> {System.out.println(s + "7890");});
}
/** 定义操作方法 */
public static void handleString(String str, MyStrFunc<String> myStrFunc){
myStrFunc.accept(str);
}
}
输出
6
1234567890
在这里,其实 handleString 方法中的代码段
myStrFunc.accept(str);
相当于 main 方法中的代码段{System.out.println(s.length());}
或{System.out.println(s + "7890");}
网友评论