Module  java.base

Package java.util.function

功能界面提供了lambda表达式和方法引用的目标类型。 每个功能界面都有一个抽象方法,称为功能接口的功能方法 ,lambda表达式的参数和返回类型与之匹配或调整。 功能界面可以在多个上下文中提供目标类型,如赋值上下文,方法调用或转换上下文:
   // Assignment context Predicate<String> p = String::isEmpty; // Method invocation context stream.filter(e -> e.getSize() > 10)... // Cast context stream.map((ToIntFunction) e -> e.getSize())...  

该包中的接口是JDK使用的通用功能接口,可供用户代码使用。 虽然它们不能识别lambda表达式可能适应的一整套功能形状,但它们足以满足常见要求。 为特定目的而提供的其他功能界面(如FileFilter在使用它们的包中定义。

该包中的接口注释为FunctionalInterface 该注释不是编译器将接口识别为功能接口的要求,而只是帮助捕获设计意图,并引导编译器帮助识别意外违反设计意图。

功能界面通常表示抽象概念,如函数,动作或谓词。 在记录功能界面或引用类型为功能接口的变量时,通常直接引用这些抽象概念,例如使用“this function”而不是“由该对象表示的函数”。 当API方法被称为以这种方式接受或返回功能界面时,例如“将所提供的功能应用于...”,这被理解为对实现适当功能界面的对象的非空引用,除非明确指定潜在的无效。

该包中的功能接口遵循可扩展的命名约定,如下所示:

  • 有几个基本功能的形状,包括Function (一元函数从TRConsumer (一元函数从TvoidPredicate (一元函数从Tboolean ),和Supplier (无参函数R )。
  • 功能形状基于它们最常用的方式具有自然界。 这些基本形状可以通过一个arity前缀来修改,以表示不同的特征,如BiFunction (二进制函数从TUR )。
  • 还有额外的派生功能形状可扩展基本功能形状,包括UnaryOperator (扩展Function )和BinaryOperator (扩展BiFunction )。
  • 功能接口的类型参数可以专用于具有附加类型前缀的原语。 要为具有通用返回类型和通用参数的类型专用返回类型,我们前缀为ToXxx ,如ToIntFunction 否则,类型参数是专门从左到右的,如DoubleConsumerObjIntConsumer (类型前缀Obj用于表示我们不想专门化此参数,但要转到下一个参数,如ObjIntConsumer所示) 。这些方案可以组合,如IntToDoubleFunction
  • 如果所有参数都有专门化的前缀,则可以省略arity前缀(如ObjIntConsumer )。
从以下版本开始:
1.8
另请参见:
FunctionalInterface