Domanda

Qual è lo scopo delle annotazioni in Java?Ho questo fuzzy idea di loro, come da qualche parte tra un commento e l'attuale codice.Essi riguardano il programma in fase di esecuzione?

Quali sono i tipici usi?

Sono unici per Java?C'è un C++ equivalente?

È stato utile?

Soluzione

Le annotazioni sono utilizzati principalmente dal codice di ispezione codice.Essi sono spesso utilizzati per la modifica (es.la decorazione o l'imballo) classi esistenti e in fase di esecuzione per cambiare il loro comportamento.Quadri come JUnit e Sospensione utilizzare le annotazioni per ridurre la quantità di codice da scrivere a voi stessi di utilizzare le strutture.

Oracle ha una buona spiegazione del concetto e il suo significato in Java sul loro sito.

Altri suggerimenti

Inoltre, sono unici a Java, c'è un C++ equivalente?

No, ma VB e C# hanno attributi che sono la stessa cosa.

Il loro uso è molto diversa.Una tipica Java esempio, @Override non ha alcun effetto sul codice, ma può essere utilizzato dal compilatore per generare un messaggio di avviso (o errore) se decorato di metodo, che in realtà non ignorare un altro metodo.Allo stesso modo, i metodi possono essere contrassegnati obsoleti.

Poi c'è la riflessione.Quando si riflette un tipo di una classe nel codice, è possibile accedere agli attributi e di agire secondo le informazioni che si trovano lì.Non conosco esempi in Java ma in .NET questo è utilizzato dal compilatore per generare (de)serializzazione informazioni per le classi, determinare il layout di memoria di strutture e dichiarare la funzione importa legacy librerie (tra gli altri).Essi controllano inoltre l'IDE di progettazione form funziona.

/EDIT:Attributi classi sono paragonabili a tag interfacce (come Serializable in Java).Tuttavia, l' .NET linee guida di codifica dire di non usare tag interfacce.Inoltre, essi funzionano solo sul livello di classe, non a livello di metodo.

Anders dà una buona sintesi, ed ecco un esempio di un JUnit annotazione

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Qui il @Test annotazione sta dicendo che il JUnit flatfileMissing il metodo è un test che devono essere eseguiti e che il risultato previsto è lanciato in IOException.Così, quando si esegue il test, verrà chiamato questo metodo e il test sarà positivo o negativo a seconda se un IOException viene generata.

Java ha anche l'Annotazione Strumento di Elaborazione (apt), dove non solo è possibile creare annotazioni, ma anche decidere in che modo queste annotazioni lavorare sul codice sorgente.

Qui è un'introduzione.

Per vedere alcune cose interessanti che si possono fare con le Annotazioni, check-out il mio JavaBean annotazioni e annotazione del processore.

Sono ideali per la generazione di codice, aggiungendo ulteriori convalide durante la vostra build, e ho anche stato con loro per un messaggio di errore del framework (non ancora pubblicata -- la necessità di cancellare con il boss...).

Dal letterale definizione di un'annotazione aggiunge note di un elemento.Allo stesso modo, Java annotations sono i tag, inserire nel codice sorgente per fornire ulteriori informazioni in merito al codice.Java annotations associare informazioni con le annotazioni elemento del programma.Accanto Java annotations programmi Java sono abbondanti quantità di informale documentazione che solitamente è contenuta all'interno dei commenti nel file di codice sorgente.Ma, Java annotations sono diversi dai commenti che annotare gli elementi del programma direttamente utilizzando i tipi di annotazioni per descrivere la forma di annotazioni.Java Annotations presentare le informazioni in standard e strutturato in modo che possa essere utilizzato amenably da strumenti di elaborazione.

Per leggere nel dettaglio, c'è un bel tutorial su Java Annotations

Quando si utilizza Java @Override di annotazione e perché? Il link si riferisce a una domanda su quando si dovrebbe utilizzare l'override di annotazione(@override)..Questo potrebbe aiutare a capire il concetto di annotazione meglio.Check out.

Annotazioni quando si tratta di EJB è conosciuta come la scelta Implicita middle-ware approccio più esplicito middle-ware approccio , quando si utilizza l'annotazione sei personalizzazione che cosa è esattamente necessario dalle API ad esempio, è necessario chiamare il metodo di transazione per un bonifico bancario :senza l'utilizzo di annotazione :il codice sarà

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

durante l'utilizzo di Annotazione il codice non contiene ingombrante chiamate API per utilizzare il mezzo- ware servizi.Il codice è pulito e concentrato sulla logica di business

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}

Annotazioni, una forma di metadati, di fornire dati su un programma che non fa parte del programma stesso.Le annotazioni non hanno alcun effetto diretto sul funzionamento del codice, annota.

Le annotazioni hanno un numero di usi, tra i quali:

  • Informazioni per il compilatore — Le annotazioni possono essere utilizzate dal compilatore per rilevare errori o eliminare gli avvisi.
  • In fase di compilazione e distribuzione-elaborazione in tempo — Strumenti Software in grado di elaborare le informazioni di annotazione per generare il codice, file XML, e così via.
  • Elaborazione Runtime — Alcune annotazioni sono disponibili per essere esaminato in fase di runtime.

La visibilità ambito di applicazione è definito da java.lang.annotation.RetentionPolicy costanti SOURCE, CLASS, e RUNTIME

  • RetentionPolicy.SOURCE:Le annotazioni dovranno essere disponibili nel codice sorgente del programma e può essere utilizzato dal compilatore o apt per la generazione del codice.
  • RetentionPolicy.CLASS:Le annotazioni dovranno essere in .file di classe, ma non essere disponibile in fase di runtime.Utilizzato da byte di codice di manipolazione di strumenti come ASM eseguire le modifiche
  • RetentionPolicy.RUNTIME:L'annotazione sarà disponibile .file di classe e l'esecuzione, per l'ispezione tramite java reflection via getAnnotations().
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top