Ejemplos

Ejemplo 02: Uso de clases genéricas en Java

En este ejemplo, se muestra cómo utilizar clases genéricas en Java para crear una clase de lista personalizada que puede almacenar cualquier tipo de datos.

Descripción del Problema

Eres un desarrollador de software que necesita crear una clase de lista personalizada en Java que pueda almacenar cualquier tipo de datos. Quieres utilizar clases genéricas para lograr esto, pero no estás seguro de cómo implementarlo correctamente.

Solución

Paso 1: Crear la clase genérica

Primero, creamos una clase genérica llamada MiLista que puede almacenar cualquier tipo de datos. Utilizamos el símbolo <T> para indicar que esta clase es genérica y puede aceptar cualquier tipo de dato.

public class MyList<T> {
    private Object[] elements;
    private int size;

    public MyList() {
        elements = new Object[10];
        size = 0;
    }

    public void add(T element) {
        if (size == elements.length) {
            resize();
        }
        elements[size++] = element;
    }

    public T get(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
        }
        return (T) elements[index];
    }

    public int size() {
        return size;
    }

    private void resize() {
        int newSize = elements.length * 2;
        Object[] newElements = new Object[newSize];
        System.arraycopy(elements, 0, newElements, 0, elements.length);
        elements = newElements;
    }
}

Diseccionamos el código:

  • La clase MyList<T> es una clase genérica que puede almacenar cualquier tipo de datos.
  • El constructor inicializa un array de objetos con una capacidad inicial de 10 y establece el tamaño en 0.
  • El método add(T element) agrega un elemento a la lista. Si el tamaño actual es igual a la capacidad del array, se llama al método resize() para aumentar la capacidad del array.
  • El método get(int index) devuelve el elemento en la posición especificada. Si el índice es inválido, lanza una excepción IndexOutOfBoundsException.
  • El método size() devuelve el número de elementos actualmente almacenados en la lista.
  • El método resize() duplica la capacidad del array cuando es necesario.
  • El uso de Object[] para almacenar los elementos es una técnica común en la implementación de clases genéricas, ya que Java no permite la creación directa de arrays de tipos genéricos.

Paso 2: Usar la clase genérica

Ahora que tenemos nuestra clase genérica MyList, podemos usarla para almacenar diferentes tipos de datos. Aquí hay un ejemplo de cómo usar la clase MyList para almacenar enteros y cadenas:

void main() {
    MyList<Integer> intList = new MyList<>();
    intList.add(1);
    intList.add(2);
    intList.add(3);
    IO.println("Integer List Size: " + intList.size());
    IO.println("First Element: " + intList.get(0));

    MyList<String> stringList = new MyList<>();
    stringList.add("Hello");
    stringList.add("World");
    IO.println("String List Size: " + stringList.size());
    IO.println("First Element: " + stringList.get(0));
}

En este ejemplo, creamos una instancia de MyList para almacenar enteros y otra para almacenar cadenas. Agregamos algunos elementos a cada lista y luego imprimimos el tamaño de la lista y el primer elemento de cada lista.

Conclusión

En este ejemplo, hemos demostrado cómo crear y utilizar una clase genérica en Java para almacenar diferentes tipos de datos. Las clases genéricas son una herramienta poderosa que permite a los desarrolladores escribir código más flexible y reutilizable. Al utilizar clases genéricas, puedes evitar la necesidad de escribir código duplicado para cada tipo de dato que deseas almacenar, lo que mejora la eficiencia y la mantenibilidad de tu código.

Copyright Jesús Aurelio Castro Magaña © 2026