Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe

Java Generics – Construyendo Código Reutilizable y Type-Safe

Esta guía explica Java generics, cómo crear clases y métodos genéricos, y los beneficios que aportan, ilustrados con ejemplos claros.

Los generics de Java te permiten escribir una clase, interfaz o método que puede operar en muchos tipos de datos diferentes, manteniendo la seguridad en tiempo de compilación.

Nota: Generics no funcionan con tipos primitivos (int, float, char, etc).


Clase Genérica en Java

Al declarar un parámetro de tipo, puedes crear una clase que funcione con cualquier tipo de objeto.

Ejemplo: Crear una Clase Genérica

class Main {
    public static void main(String[] args) {
        ClaseGenerica<Integer> objInt = new ClaseGenerica<>(5);
        System.out.println("Clase Genérica retorna: " + objInt.obtenerDato());
        ClaseGenerica<String> objString = new ClaseGenerica<>("Programación Java");
        System.out.println("Clase Genérica retorna: " + objString.obtenerDato());
    }
}

class ClaseGenerica<T> {
    private T dato;
    public ClaseGenerica(T dato) {
        this.dato = dato;
    }
    public T obtenerDato() {
        return this.dato;
    }
}

Salida

Clase Genérica retorna: 5
Clase Genérica retorna: Programación Java

En el ejemplo anterior, ClaseGenerica es una clase genérica donde T es el parámetro de tipo. Se crean dos instancias:


Método Genérico en Java

Los métodos también pueden ser genéricos, permitiéndoles aceptar cualquier tipo de argumento manteniendo la seguridad de tipos.

Ejemplo: Crear un Método Genérico

class Main {
    public static void main(String[] args) {
        ClaseDemo demo = new ClaseDemo();
        demo.<String>metodoGenerico("Programación Java");
        demo.<Integer>metodoGenerico(25);
    }
}

class ClaseDemo {
    public <T> void metodoGenerico(T dato) {
        System.out.println("Método Genérico:");
        System.out.println("Dato Pasado: " + dato);
    }
}

Salida

Método Genérico:
Dato Pasado: Programación Java
Método Genérico:
Dato Pasado: 25

Cuando el compilador puede inferir el tipo, puedes omitir el argumento de tipo explícito:

demo.metodoGenerico("Programación Java");

Tipos Acotados (Bounded Types)

A veces quieres que un tipo genérico acepte solo una familia específica de clases. Los tipos acotados logran esto usando la palabra clave extends.

Sintaxis: <T extends A> – T puede ser A o cualquier subtipo de A.

Ejemplo: Tipos Acotados

class ClaseGenerica <T extends Number> {
    public void mostrar() {
        System.out.println("Esta es una clase genérica de tipo acotado.");
    }
}

class Main {
    public static void main(String[] args) {
        // ClaseGenerica<String> obj = new ClaseGenerica<>(); // error en tiempo de compilación
    }
}

Aquí, ClaseGenerica acepta solo tipos numéricos (Integer, Double, etc.). Intentar instanciarla con String causa un error en tiempo de compilación:

ClaseGenerica<String> obj = new ClaseGenerica<>();
^ reason: inference variable T has incompatible bounds
equality constraints: String
lower bounds: Number
where T is a type-variable:
T extends Number declared in class ClaseGenerica

Ventajas de Java Generics

1. Reutilización de Código

El código genérico puede operar en múltiples tipos de datos, reduciendo duplicación. Por ejemplo, un solo método puede procesar enteros, cadenas y objetos personalizados.

2. Comprobación de Tipos en Tiempo de Compilación

Como el parámetro de tipo se conoce en tiempo de compilación, el compilador puede detectar incompatibilidades de tipos antes de que el programa se ejecute.

3. Integración Perfecta con Colecciones

El framework de colecciones de Java está basado en generics, permitiendo que las colecciones impongan type safety. Ejemplos:

ArrayList<String> lista1 = new ArrayList<>();
ArrayList<Integer> lista2 = new ArrayList<>();

Otras clases de colección (LinkedList, Queue, Map, etc.) también usan generics para los mismos beneficios.

Java

  1. Palabra clave final en Java: Variables, métodos y clases
  2. Operador instanceof en Java: Guía completa
  3. Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
  4. Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
  5. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  6. Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
  7. Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
  8. Dominando ArrayList en Java: Operaciones, métodos y mejores prácticas
  9. Clase Stack de Java: Guía Completa de Uso y Métodos
  10. Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
  11. Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación