Els generics són una característica poderosa de Java que permeten definir classes, interfícies i mètodes amb tipus de dades parametritzats. Això proporciona una manera de crear codi més flexible i reutilitzable, alhora que millora la seguretat del tipus en temps de compilació.

Conceptes Clau

  1. Tipus Parametritzats: Permeten definir classes, interfícies i mètodes amb un o més paràmetres de tipus.
  2. Seguretat del Tipus: Els generics permeten detectar errors de tipus en temps de compilació en lloc de temps d'execució.
  3. Reutilització del Codi: Faciliten la creació de codi reutilitzable que pot treballar amb qualsevol tipus d'objecte.

Definició de Generics

Classes Generiques

Una classe genèrica es defineix utilitzant un o més paràmetres de tipus. Aquests paràmetres es col·loquen entre els símbols < i > després del nom de la classe.

public class Caixa<T> {
    private T contingut;

    public void posar(T contingut) {
        this.contingut = contingut;
    }

    public T obtenir() {
        return contingut;
    }
}

En aquest exemple, Caixa és una classe genèrica amb un paràmetre de tipus T. Això significa que Caixa pot contenir qualsevol tipus d'objecte.

Mètodes Generics

Els mètodes també poden ser generics. Els paràmetres de tipus es defineixen abans del tipus de retorn del mètode.

public class Utilitats {
    public static <T> void imprimirArray(T[] array) {
        for (T element : array) {
            System.out.println(element);
        }
    }
}

En aquest exemple, imprimirArray és un mètode genèric que pot imprimir elements de qualsevol tipus d'array.

Utilització de Generics

Creació d'Objectes Generics

Quan es crea una instància d'una classe genèrica, es substitueix el paràmetre de tipus per un tipus concret.

Caixa<String> caixaDeText = new Caixa<>();
caixaDeText.posar("Hola, Generics!");
System.out.println(caixaDeText.obtenir());

En aquest exemple, Caixa<String> és una instància de Caixa que conté objectes de tipus String.

Tipus Genèrics Limitats

Els tipus genèrics es poden limitar per assegurar-se que només accepten certs tipus de dades. Això es fa utilitzant la paraula clau extends.

public class CaixaLimitada<T extends Number> {
    private T contingut;

    public void posar(T contingut) {
        this.contingut = contingut;
    }

    public T obtenir() {
        return contingut;
    }
}

En aquest exemple, CaixaLimitada només accepta tipus que són subclasses de Number.

Exercicis Pràctics

Exercici 1: Crear una Classe Genèrica

Crea una classe genèrica Parell que emmagatzemi dos objectes del mateix tipus.

public class Parell<T> {
    private T primer;
    private T segon;

    public Parell(T primer, T segon) {
        this.primer = primer;
        this.segon = segon;
    }

    public T getPrimer() {
        return primer;
    }

    public T getSegon() {
        return segon;
    }
}

Exercici 2: Utilitzar una Classe Genèrica

Utilitza la classe Parell per emmagatzemar un parell de nombres enters i un parell de cadenes de text.

public class TestParell {
    public static void main(String[] args) {
        Parell<Integer> parellEnter = new Parell<>(1, 2);
        System.out.println("Primer: " + parellEnter.getPrimer() + ", Segon: " + parellEnter.getSegon());

        Parell<String> parellText = new Parell<>("Hola", "Generics");
        System.out.println("Primer: " + parellText.getPrimer() + ", Segon: " + parellText.getSegon());
    }
}

Errors Comuns i Consells

  1. Tipus Primitivus: Els generics no poden utilitzar tipus primitius com int, char, etc. Utilitza les seves classes envoltants (Integer, Character, etc.).
  2. Tipus Raw: Evita utilitzar tipus raw (sense paràmetres de tipus). Això pot provocar advertències de compilació i errors en temps d'execució.
  3. Conversió de Tipus: No facis conversions de tipus innecessàries. Els generics estan dissenyats per evitar la necessitat de conversions explícites.

Conclusió

Els generics són una eina poderosa en Java que permeten escriure codi més flexible, reutilitzable i segur. Comprendre com definir i utilitzar classes i mètodes generics és essencial per a qualsevol programador de Java. Amb la pràctica, els generics es convertiran en una part natural del teu repertori de programació.

Curs de Programació en Java

Mòdul 1: Introducció a Java

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

Mòdul 4: Programació Orientada a Objectes Avançada

Mòdul 5: Estructures de Dades i Col·leccions

Mòdul 6: Gestió d'Excepcions

Mòdul 7: Entrada/Sortida de Fitxers

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats