【JS中的疑惑】把代码块当作参数传递--- 函数式接口Lambda 表达式
在 Java 中函数式接口Functional Interface是一个非常简洁但功能强大的概念。简单来说它是一个“只有且仅有一个抽象方法”的接口。1. 核心特征只有一个“指令”如果一个接口中只定义了一个抽象方法别的什么都没有或者只有默认方法它就是一个函数式接口。举个例子Comparator就是一个典型的函数式接口FunctionalInterface // 这是一个标志用来告诉编译器这是一个函数式接口 public interface ComparatorT { int compare(T o1, T o2); // 核心只有这一个抽象方法 // 虽然接口里可能还有其他默认方法但关键在于“只有一个需要被实现的抽象方法” }2. 为什么要有它—— 为了“Lambda 表达式”函数式接口存在的最大意义就是允许你用 Lambda 表达式来简化代码。在没有函数式接口之前如果你想使用Comparator你必须写一大段“匿名内部类”// 这是传统的、繁琐的写法 Arrays.sort(tempArr, new ComparatorCharacter() { Override public int compare(Character c1, Character c2) { return c1.compareTo(c2); } });有了函数式接口Java 知道你定义的这个接口只有一个方法所以它允许你直接把“方法的内容”作为参数传进去这就是Lambda 表达式// 这是超级简洁的写法 Arrays.sort(tempArr, (c1, c2) - c1.compareTo(c2));看这行代码就是 Lambda 表达式它告诉 Java这里的参数就是c1和c2要做的事情就是c1.compareTo(c2)。它自动对应了接口里那个唯一的compare方法。3. 它有什么好处代码极度精简从原来的 5-6 行缩短到 1 行。聚焦逻辑弱化形式你不再需要纠结于“写类”、“实例化”、“重写方法”这些复杂的模板代码而是直接写逻辑函数这让代码更像是在描述“要做什么”而不是“怎么组装对象”。函数式编程支持它让 Java 可以像 Python 或 JavaScript 那样把“逻辑函数”当作一种数据进行传递。总结定义只有一个抽象方法的接口。用途它是 Lambda 表达式的“栖息地”。辨识看到FunctionalInterface注解或者看到一个接口里只有一个未实现的方法它就是函数式接口。理解总结函数式接口就是为了让 Java 支持“把代码块当作参数传递”而定义的特殊“契约”。当你看到 Lambda 表达式时你就在使用函数式接口。