Saltar al contenido principal
eLearner.app
Módulo 6 · Lección 2 de 212/14 en el curso~15 min
Lecciones del módulo (2/2)

Tipos Genéricos en Java

Los Generics (Tipos Genéricos) se introdujeron en Java para permitir que las clases, interfaces y métodos operen sobre diferentes tipos como parámetros, garantizando el control de tipos en tiempo de compilación (Compile-time Type Safety) y evitando costosas conversiones (casts) explícitas en tiempo de ejecución.

Clases Genéricas

Una clase genérica se define utilizando paréntesis angulares <T> donde T representa un marcador de posición para un tipo que se especificará en el momento de la instanciación.

Code
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Al crear un objeto de tipo Box, especificamos el tipo real:

Code
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // Nessun cast necessario!

Métodos Genéricos

Es posible definir un único método genérico capaz de aceptar diferentes parámetros de tipo. El parámetro de tipo se coloca antes del tipo de retorno del método.

Code
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

Limitaciones de los Generics (Wildcards)

Podemos limitar los tipos aceptados por un genérico mediante la palabra clave extends (límite superior) para aceptar un tipo específico o sus subclases.

Code
public static <T extends Number> void processNumber(T number) {
    // Accetta Integer, Double, Float, ecc.
    System.out.println(number.doubleValue());
}

Pruébalo tú

Ejercicio#java.m6.l2.e1
Intentos: 0Cargando...

Completa la clase genérica Box definiendo el getter getValue() que devuelva T y el setter setValue(T value) que asigne la variable privada value.

Cargando editor...
Mostrar pista

Escribe los métodos con la firma correcta utilizando el parámetro de tipo genérico `T`.

Solución disponible después de 3 intentos

Ejercicio#java.m6.l2.e2
Intentos: 0Cargando...

Crea un método genérico estático printArray que tome como entrada un arreglo de tipo T[] llamado array e imprima cada elemento usando un bucle for-each.

Cargando editor...
Mostrar pista

El parámetro de tipo `<T>` debe colocarse inmediatamente después de `static` y antes del tipo de retorno `void`.

Solución disponible después de 3 intentos

Ejercicio#java.m6.l2.e3
Intentos: 0Cargando...

Crea una clase estática StringContainer que implemente la interfaz Container parametrizada con String. Define un constructor que acepte un parámetro String e implemente el método getItem().

Cargando editor...
Mostrar pista

Reemplaza el tipo genérico `T` con `String` en la firma de la clase y en el tipo de retorno del método `getItem()`.

Solución disponible después de 3 intentos