AnyCompiler

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());
    }
}
Output
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));
    }
}
Output
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.