0Pricing
Java Academy · Lezione

Definire annotazioni: elementi e valori predefiniti

Crei annotazioni personalizzate con @interface, definisca elementi con valori predefiniti e applichi meta-annotazioni.

Definire annotazioni: elementi e valori predefiniti è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Che cosa sono le annotazioni?

Le annotazioni sono metadati applicati a classi, metodi, campi o parametri. Non modificano direttamente il comportamento: forniscono informazioni ai compilatori, ai framework o ai processori in fase di esecuzione.

Dichiarare un'annotazione con @interface

Utilizzi @interface per dichiarare un'annotazione personalizzata. Gli elementi hanno l'aspetto di metodi. Il valore predefinito viene specificato con default.

@interface Retry {
    int times()      default 3;
    long delayMs()   default 1000L;
    Class<? extends Throwable>[] on() default {Exception.class};
}

Applicare l'annotazione

Applichi l'annotazione all'elemento di destinazione. Ometta gli elementi che hanno valori predefiniti. Quando viene denominato value un solo elemento, è possibile impostarlo senza specificare la chiave.

@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }

// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}

Tipi degli elementi delle annotazioni

Gli elementi possono essere soltanto: tipi primitivi (int, long, ecc.), String, Class, un enum, un altro tipo di annotazione oppure un array monodimensionale dei tipi precedenti.

@interface Config {
    String   host();
    int      port()      default 8080;
    LogLevel level()     default LogLevel.INFO;  // enum
    Class<?> handler()   default DefaultHandler.class;
    String[] tags()      default {};
}

Meta-annotazioni: @Retention

@Retention controlla per quanto tempo viene conservata l'annotazione: SOURCE (scartata dal compilatore), CLASS (nel file .class, ma non in fase di esecuzione), RUNTIME (leggibile tramite reflection).

@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
    int times() default 3;
}

Meta-annotazioni: @Target

@Target limita i punti in cui è possibile applicare l'annotazione. È possibile elencare più destinazioni.

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
    String description() default "";
}

@Documented e @Inherited

@Documented include l'annotazione nella documentazione Javadoc. @Inherited consente alle sottoclassi di ereditare l'annotazione dalla propria superclasse (solo per le annotazioni a livello di classe).

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Category {
    String value();
}

Annotazioni @Repeatable

Contrassegni un'annotazione con @Repeatable per consentirne la comparsa più volte sullo stesso elemento. Fornisca un'annotazione contenitore che contenga un array.

@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }

@Tag("fast")
@Tag("stable")
public class Service {}

Valori predefiniti e omissione degli elementi

Non è necessario specificare nel punto di utilizzo gli elementi con valori default. Gli elementi privi di valori predefiniti sono obbligatori.

@Retry                  // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1)         // overrides only times; delayMs stays 1000
public void action2() {}

Annotazione e interfaccia marker a confronto

Le interfacce marker (come Serializable) vengono verificate con instanceof e trasmettono informazioni sul tipo. Le annotazioni sono più flessibili: contengono metadati e possono avere elementi.

Annotazioni integrate comuni

Conosca le annotazioni del JDK: @Override, @Deprecated, @FunctionalInterface, @SuppressWarnings e @SafeVarargs.

@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}

Verifica rapida

Qual è l'unica politica di conservazione che rende un'annotazione leggibile in fase di esecuzione?

Riepilogo

Dichiari le annotazioni con @interface. Utilizzi @Retention(RUNTIME) per l'elaborazione tramite reflection, @Target per limitare l'utilizzo e default per gli elementi facoltativi. @Repeatable consente di applicare più annotazioni dello stesso tipo.

Domande Frequenti

La lezione «Definire annotazioni: elementi e valori predefiniti» è gratuita?

Sì — il testo completo di «Definire annotazioni: elementi e valori predefiniti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «Definire annotazioni: elementi e valori predefiniti»?

Crei annotazioni personalizzate con @interface, definisca elementi con valori predefiniti e applichi meta-annotazioni. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Definire annotazioni: elementi e valori predefiniti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Definire annotazioni: elementi e valori predefiniti
  2. Politiche di conservazione e tipi di target
  3. Elaborazione delle annotazioni a runtime
  4. Annotation processor a compile time
← Torna a Java Academy