2009-02-25 19 views
41

Ho appena scoperto questa funzione.Utilizzo della dichiarazione predefinita @interface in Java

La dichiarazione di un'interfaccia mediante la sintassi "@interface" consente di inserire un valore predefinito.

public @interface HelloWorld { 
    public String sayHello() default "hello world"; 
} 

Questo è qualcosa di nuovo per me. Come si suppone di utilizzare questo valore predefinito.

non riesco a trovare riferimenti a tale, perché il www è piena di documenti interfaccia Java prima di "@" Oltre a Java 1.5 (era su 0,5 o 0,4?)


EDIT

Grazie per le risposte (io ero in qualche modo vicino alla "annotazione", perché io uso il tag già): P

sapevo che avrei dovuto leggere quel documento anni fa !!! .. le vedi ...

Molte API richiedono una buona quantità di codice boilerplate. Per ....

+2

E da non confondere con i metodi di interfaccia predefiniti di Java 8: http://java.dzone.com/articles/interface-default-methods-java –

risposta

55

Hai appena scritto un annotation.

Riguardo l'istruzione default in particolare: Questo viene utilizzato perché le annotazioni e le interfacce non possono avere costruttori, quindi questo è l'unico modo per avere un valore predefinito per un attributo di annotazione. Da Java Language Specification:

Un elemento del tipo di annotazione può avere un valore predefinito specificato. Questo viene fatto seguendo il suo elenco di parametri (vuoto) con la parola chiave default e il valore predefinito dell'elemento.

I valori predefiniti vengono applicati dinamicamente al momento della lettura delle annotazioni; i valori predefiniti non sono compilati in annotazioni. Pertanto, la modifica di un valore predefinito influisce sulle annotazioni anche nelle classi compilate prima della modifica (presumendo che queste annotazioni non abbiano un valore esplicito per l'elemento predefinito).

Nota che nessuna delle annotazioni in java.lang.annotation utilizza valori predefiniti, tuttavia.


Usage: Hai un'annotazione @HelloWorld con un attributo sayHello. Si potrebbe mettere su una classe come questa:

@HelloWorld(sayHello="Hi") 
public class MyClass { 
} 

Dal momento che si dispone di un valore predefinito, si può solo mettere

@HelloWorld 
public class MyClass { 
} 

(Si noti che il documento dice: "In annotazioni con un unico elemento, l'elemento dovrebbe essere denominato value "; credo che l'unica ragione per farlo è che si potrebbe semplicemente scrivere @HelloWorld("Hi") senza dover denominare il parametro.)

Come scritto, l'annotazione può essere utilizzata su qualsiasi elemento di programma valido (inclusi metodi e dichiarazioni di variabili). È possibile modificare questo con l'annotazione @Target.

Infine, l'impostazione di RetentionPolicy consente di decidere se l'annotazione deve essere eliminata dal compilatore, scartata dalla VM o mantenuta sempre.


Due pacchetti che potrebbe anche essere interessante: javax.annotation e javax.annotation.processing. E here è un esempio dell'utilizzo dell'elaborazione delle annotazioni per l'analisi del codice sorgente.

+1

+1: Grazie mmyers: hai qualche riassunto per questo pigro programmatore? – OscarRyz

+0

Riepilogo di cosa? Tutti gli usi delle annotazioni? –

+1

No, solo l'uso dell'interfaccia @ ... Vedrò il collegamento ... più tardi: -/ – OscarRyz

4

Questo è un annotation che stai dichiarando non un'interfaccia. È stato aggiunto in Java 1.5.

+0

+1. Oh ... sì, l'annotazione. Penso di aver ignorato la lezione per quelli quando ho detto "Quando ho bisogno di creare uno strumento per l'elaborazione delle annotazioni, arriverò a quello". Oggi stavo guardando il codice sorgente di Groovy e quella è stata la prima cosa che mi ha sconcertato. – OscarRyz

Problemi correlati