Ricerca…


introduzione

Il processore di annotazione è uno strumento creato in javac per la scansione e l'elaborazione delle annotazioni in fase di compilazione.

Le annotazioni sono una classe di metadati che possono essere associati a classi, metodi, campi e persino altre annotazioni. Esistono due modi per accedere a queste annotazioni in fase di runtime tramite riflessione e in fase di compilazione tramite i processori di annotazione.

@NonNull Annotazione

public class Foo {
    private String name;
    public Foo(@NonNull String name){...};
    ...
}

Qui @NonNull è un'annotazione che viene elaborata dal tempo di compilazione da parte di Android Studio per avvertirti che la particolare funzione ha bisogno di un parametro non nullo.

Tipi di annotazioni

Esistono tre tipi di annotazioni.

  1. Annotazione marcatore : annotazione senza metodo

    @interface CustomAnnotation {}
    
  1. Annotazione a valore singolo - annotazione con un metodo

    @interface CustomAnnotation {  
        int value();  
    }
    
  1. Annotazione a più valori : annotazione con più di un metodo

    @interface CustomAnnotation{  
        int value1();  
        String value2();  
        String value3();  
    }
    

Creazione e utilizzo di annotazioni personalizzate

Per creare annotazioni personalizzate dobbiamo decidere

  • Target - su cui queste annotazioni funzioneranno come il livello del campo, il livello del metodo, il livello del tipo ecc.
  • Conservazione - a quale livello di annotazione sarà disponibile.

Per questo, abbiamo creato annotazioni personalizzate. Dai un'occhiata a quelli usati principalmente:

@Bersaglio

Target e cosa significa

@Ritenzione

Ritenzione e cosa significa

Creazione di annotazioni personalizzate

@Retention(RetentionPolicy.SOURCE) // will not be available in compiled class   
@Target(ElementType.METHOD) // can be applied to methods only
@interface CustomAnnotation{  
      int value();    
}

Utilizzo di annotazioni personalizzate

class Foo{  
  @CustomAnnotation(value = 1)  // will be used by an annotation processor
  public void foo(){..}  
}

il valore fornito in @CustomAnnotation verrà utilizzato da un processo di annotazione per generare codice in fase di compilazione, ecc.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow