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:
- Entendre què són les annotations i per què s'utilitzen.
- Aprendre a utilitzar annotations predefinides.
- Crear annotations personalitzades.
- 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.
@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
, iRetentionPolicy.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
- Crea una classe
Person
amb un mètodegetName()
. - Crea una subclasse
Employee
que sobreescrigui el mètodegetName()
. - 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
- Defineix una anotació
@Info
amb dos elements:author
idate
. - Aplica aquesta anotació a una classe
Book
. - 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
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
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
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection