Introducció a les Annotations

Les annotations en Java són una forma de metadades que es poden afegir al codi font. Aquestes metadades proporcionen informació addicional que pot ser utilitzada pel compilador, eines de desenvolupament o en temps d'execució. Les annotations no afecten directament el comportament del codi, però poden influir en com es processa o s'executa.

Objectius d'aquest tema:

  1. Entendre què són les annotations i per què s'utilitzen.
  2. Aprendre a utilitzar annotations predefinides.
  3. Crear annotations personalitzades.
  4. Aplicar annotations en diferents contextos.

Annotations Predefinides

Java proporciona diverses annotations predefinides que són molt útils en el desenvolupament diari. Algunes de les més comunes són:

@Override

Indica que un mètode està sobreescrivint un mètode de la superclasse.

class SuperClass {
    void display() {
        System.out.println("SuperClass display()");
    }
}

class SubClass extends SuperClass {
    @Override
    void display() {
        System.out.println("SubClass display()");
    }
}

@Deprecated

Marca un mètode, classe o camp com a obsolet, indicant que no s'hauria d'utilitzar perquè pot ser eliminat en futures versions.

class Example {
    @Deprecated
    void oldMethod() {
        System.out.println("This method is deprecated");
    }
}

@SuppressWarnings

Indica al compilador que suprimeixi advertències específiques.

class Example {
    @SuppressWarnings("unchecked")
    void method() {
        List rawList = new ArrayList();
        rawList.add("Test");
    }
}

Creació d'Annotations Personalitzades

A més de les annotations predefinides, també podem crear les nostres pròpies annotations per proporcionar metadades específiques.

Definició d'una Anotació Personalitzada

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotation {
    String value();
    int number() default 0;
}

Utilització d'una Anotació Personalitzada

class Example {
    @MyAnnotation(value = "Hello", number = 5)
    void annotatedMethod() {
        System.out.println("This method is annotated with MyAnnotation");
    }
}

Explicació dels Elements de l'Anotació

  • @Retention: Indica quan l'anotació està disponible (en temps de compilació, en temps d'execució, etc.). Els valors possibles són RetentionPolicy.SOURCE, RetentionPolicy.CLASS, i RetentionPolicy.RUNTIME.
  • @Target: Indica on es pot aplicar l'anotació (mètodes, camps, classes, etc.). Els valors possibles inclouen ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, etc.

Processament d'Annotations en Temps d'Execució

Podem utilitzar la reflexió per accedir a les annotations en temps d'execució.

Exemple de Processament d'Annotations

import java.lang.reflect.Method;

class AnnotationProcessor {
    public static void main(String[] args) {
        try {
            Method method = Example.class.getMethod("annotatedMethod");
            if (method.isAnnotationPresent(MyAnnotation.class)) {
                MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
                System.out.println("Value: " + annotation.value());
                System.out.println("Number: " + annotation.number());
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

Exercicis Pràctics

Exercici 1: Utilitzar Annotations Predefinides

  1. Crea una classe Person amb un mètode getName().
  2. Crea una subclasse Employee que sobreescrigui el mètode getName().
  3. Utilitza l'anotació @Override en el mètode sobreescrit.

Solució

class Person {
    String getName() {
        return "Person";
    }
}

class Employee extends Person {
    @Override
    String getName() {
        return "Employee";
    }
}

Exercici 2: Crear i Utilitzar una Anotació Personalitzada

  1. Defineix una anotació @Info amb dos elements: author i date.
  2. Aplica aquesta anotació a una classe Book.
  3. Utilitza la reflexió per imprimir els valors de l'anotació en temps d'execució.

Solució

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.reflect.Method;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Info {
    String author();
    String date();
}

@Info(author = "John Doe", date = "2023-10-01")
class Book {
    // Class implementation
}

public class AnnotationExample {
    public static void main(String[] args) {
        if (Book.class.isAnnotationPresent(Info.class)) {
            Info info = Book.class.getAnnotation(Info.class);
            System.out.println("Author: " + info.author());
            System.out.println("Date: " + info.date());
        }
    }
}

Conclusió

Les annotations són una eina poderosa en Java que permeten afegir metadades al codi font. Aquestes metadades poden ser utilitzades pel compilador, eines de desenvolupament o en temps d'execució per modificar el comportament del codi o proporcionar informació addicional. En aquest tema, hem après a utilitzar annotations predefinides, crear annotations personalitzades i processar-les en temps d'execució. Amb aquesta base, estàs preparat per explorar i utilitzar annotations en els teus projectes Java.

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