Generics
Box<T> es una generic class — T es un placeholder que se rellena con un type real dondequiera que se use Box, así que Box<Integer> y Box<String> son ambas instanciaciones válidas y type-safe de exactamente la misma class, con el compilador detectando cualquier incompatibilidad de type en el punto de llamada.
public class Main {
static class Box<T> {
private T value;
Box(T value) {
this.value = value;
}
T getValue() {
return value;
}
}
public static void main(String[] args) {
Box<Integer> intBox = new Box<>(42);
Box<String> strBox = new Box<>("hello");
System.out.println(intBox.getValue());
System.out.println(strBox.getValue());
}
}42 hello
Generic methods
Un method puede ser generic por sí mismo, independiente de su class — <T> antes del tipo de retorno declara que first(T a, T b) funciona para cualquier type T único, con el compilador infiriendo T a partir de los argumentos en el punto de llamada, sin necesidad de un type explícito.
public class Main {
static <T> T first(T a, T b) {
return a;
}
public static void main(String[] args) {
System.out.println(first(10, 20));
}
}10
Siguiente: el Collections Framework — HashMap y HashSet, dos de los tipos de colección estándar de Java.
Practice exercise
Define una generic class Box<T> con un field value y un method getValue(). Crea un Box<String> que contenga "hello", luego imprime su value.