模块  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”而不是“this object表示的函数”。 当API方法以这种方式接受或返回功能接口时,例如“将提供的函数应用于......”,这被理解为对实现适当功能接口的对象的非空引用,除非明确指定了潜在的无效性。

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

  • 有几种基本功能形状,包括Function (一元函数TR ), Consumer (一元函数Tvoid ), Predicate (一元函数Tboolean )和SupplierR函数至R )。
  • 功能形状基于它们最常用的方式具有自然的特征。 可以通过arity前缀修改基本形状以指示不同的arity,例如BiFunction (二进制函数, TUR )。
  • 还有其他派生函数形状,它们扩展了基本函数形状,包括UnaryOperator (扩展Function )和BinaryOperator (扩展BiFunction )。
  • 功能接口的类型参数可以专用于具有附加类型前缀的基元。 要专门为具有泛型返回类型和泛型参数的类型返回类型,我们前缀为ToXxx ,如ToIntFunction中所示 否则,类型参数从左到右是专用的,如DoubleConsumerObjIntConsumer (类型前缀Obj用于指示我们不想专门化此参数,但希望继续下一个参数,如ObjIntConsumer中所示 。)这些方案可以组合,如IntToDoubleFunction
  • 如果所有参数都有专门化前缀,则可以省略arity前缀(如ObjIntConsumer )。
从以下版本开始:
1.8
另请参见:
FunctionalInterface