2014-07-10 24 views
10

È possibile specificare un'annotazione con un valore null come predefinito?Annotazione valore "null" predefinito

Quello che voglio ottenere è qualcosa come attributi di annotazione opzionali.

Per esempio

public @interface Foo { 

    Config value(); 

} 


public @interface Config { 

    boolean ignoreUnknown() default false; 
    int steps() default 2; 
} 

Vorrei usare @pippo (senza specificare il valore, e quindi dovrebbe essere una sorta di optional) e mi piacerebbe anche essere in grado di scrivere qualcosa del genere:

@Foo (
    @Config(
     ignoreUnknown = true, 
     steps = 10 
    ) 
) 

E 'possibile fare qualcosa di simile con le annotazioni?

Non voglio fare qualcosa di simile @interface pubblica Foo {

boolean ignoreUnknown() default false; 
    int steps() default 2; 
} 

perché voglio essere in grado di distinguere se una proprietà è stata impostata o meno (e se non ha la valore predefinito o meno).

È un po 'complicato da descrivere, ma sto lavorando su un piccolo Annotation Processor che genera codice Java. Comunque durante il runtime vorrei configurare una configurazione di default che dovrebbe essere usata per tutti @Foo, eccetto quelli che hanno impostato la propria configurazione con @Config.

così quello che voglio è qualcosa di simile:

public @interface Foo { 

     Config value() default null; 

} 

Ma per quanto ne so la sua non è possibile, giusto? Qualcuno conosce una soluzione alternativa per un attributo così facoltativo?

+0

Eventuali duplicati di [Errore impostazione di un valore nullo di default per il campo di un'annotazione] (http://stackoverflow.com/questions/1178104/error-setting-a-default- campo null-value-per-an-annotations) – fracz

risposta

16

No, non è possibile utilizzare null per un valore di attributo di annotazione. Tuttavia è possibile utilizzare un tipo di array e fornire un array vuoto.

public @interface Foo { 
    Config[] value(); 
} 
... 
@Foo(value = {}) 

o

public @interface Foo { 
    Config[] value() default {}; 
} 
... 
@Foo 
+0

Sì, ma devo sempre scrivere '@Foo (value = {})' e nel 90% di utilizzo non voglio fornire un'altra configurazione, quindi vorrei mi piace avere solo '@ Foo' – sockeqwe

+1

@sockeqwe È facile come impostare un' default {} '. –

+0

ah, giusto ... Ottimo! Grazie! Accetterò la tua risposta in 5 minuti (Stackoverflow dice che devo aspettare 5 minuti prima di poter accettare una risposta) – sockeqwe

Problemi correlati