附录 A 泛型与Java 8

A.1 背景

Java 1.5 引入了泛型(generics)的概念。遗憾的是,大部分 Java 开发人员对于泛型的了解仅停留在完成工作所需的层面上。随着 Java 8 的兴起,Javadoc 中出现了不少使用泛型的方法签名。以 java.util.Map.Entry 接口的 comparingByKey 方法为例:

  1. static <K extends Comparable<? super K>,V> Comparator<Map.Entry<K,V>>
  2. comparingByKey()

以及 java.util.Comparator 接口的 comparing 方法:

  1. static <T,U extends Comparable<? super U>> Comparator<T> comparing(
  2. Function<? super T,? extends U> keyExtractor)

甚至 java.util.stream.Collectors 类的 groupingBy 方法:

  1. static <T,K,D,A,M extends Map<K, D>> Collector<T,?,M> groupingBy(
  2. Function<? super T,? extends K> classifier, Supplier<M> mapFactory,
  3. Collector<? super T,A,D> downstream)

显然,对泛型仅有最低限度的了解是远远不够的。本附录旨在分析这些签名的结构,以帮助读者在开发中更有效地应用 API。