Apéndice A. Genéricos y Java 8

Antecedentes

Las capacidades genéricas se añadieron en Java hace mucho tiempo, en la versión J2SE 1.5, pero la mayoría de los desarrolladores Java sólo aprendieron lo mínimo que necesitaban saber sobre ellas para hacer su trabajo. Con la llegada de Java 8, de repente los Javadocs están llenos de firmas de métodos como ésta de java.util.Map.Entry:

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

o éste de java.util.Comparator:

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

o incluso este monstruo de java.util.stream.Collectors:

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

Entender lo mínimo ya no va a ser suficiente. El objetivo de este apéndice es ayudarte a desglosar firmas similares en partes comprensibles para que puedas utilizar la API de forma productiva.

Lo que todo el mundo sabe

Cuando quieras utilizar una colección como List o Set, declara el tipo de los elementos contenidos colocando su nombre de clase entre corchetes angulares:

List<String> strings = new ArrayList<String>();
Set<Employee> employees = new HashSet<Employee>();
Nota

Java 7 facilitó un poco la sintaxis introduciendo el operador diamante que se utiliza en los siguientes ejemplos de código. Como la referencia del lado izquierdo declara la colección ...

Get Recetas Java modernas now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.