Tracks
/
Java
Java
/
Temario
/
Tipos genéricos
Ti

Tipos genéricos en Java

11 ejercicios

Acerca de Tipos genéricos

Un tipo genérico es una clase o interfaz genérica que está parametrizada sobre tipos. Esto permite que el compilador imponga la seguridad de tipos en la clase o la interfaz.

Fíjate en esta interfaz Container no genérica:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

Como acepta y devuelve tipos Object, funciona con cualquier tipo no primitivo. Sin embargo, esto tiene un coste, porque puede que una parte del código llame a get esperando Integer mientras que otra llama a set añadiendo String, lo que da lugar a una excepción en tiempo de ejecución.

Una clase genérica y una interfaz genérica tienen el siguiente formato:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

La sección de parámetros de tipo, delimitada por corchetes angulares (<>), que sigue al nombre de la clase o la interfaz, especifica los parámetros de tipo (también llamados variables de tipo) T1, T2, ..., y Tn. Se pueden usar dentro del cuerpo de la clase o la interfaz para obtener seguridad de tipos genérica.

Esta es la versión genérica de Container:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

Al crearla, ahora hay que declarar qué tipo contiene y el compilador hará cumplir esa restricción:

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);
Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Tipos genéricos