2009-08-31 13 views
52

ho definito la mia annotazione personalizzatiannotazione personalizzato: fare un attributo opzionale

@Target(value={ElementType.METHOD, ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyCustomAnnotation { 
    Class<?> myType(); 
} 

come, se non del tutto, posso fare l'attributo facoltativo

+0

Grazie; Non so che l'attributo è obbligatorio per dichiarare se 'default' non è fornito :) –

risposta

84

È possibile provide a default value per l'attributo:

@Target(value={ElementType.METHOD, ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyCustomAnnotation { 
    Class<?> myType() default Object.class; 
} 
+0

trovato prima di te, ma penso che sia giusto selezionare la tua risposta – flybywire

+4

@flybywire Come puoi dire di averlo trovato prima di Dan come hai risposto alle 15:18 mentre rispondeva alle 15:17? – redochka

+8

Forse Dan digita più veloce :-) –

2

Trovato. Non può essere facoltativo, ma un default può essere dichiarata in questo modo:

@Target(value={ElementType.METHOD, ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyCustomAnnotation { 
    Class<?> myType() default String.class; 
} 

Se nessun default può dare un senso come valore di "vuoto" allora che è un problema.

+0

Se hai bisogno di una classe predefinita, e potresti avere effettivamente bisogno di String.class come valore, considera invece l'utilizzo di java.util.Void.class (dato che non puoi creare un'istanza o usarla realmente in altro modo) – Ajax

1

Per l'attributo facoltativo è necessario fornire un valore predefinito per quell'attributo che è possibile fornire il valore predefinito utilizzando la parola chiave "predefinita".

Nota: per un solo attributo è possibile utilizzare il nome dell'attributo come valore. Se si utilizza il nome dell'attributo come valore , è possibile passare direttamente un valore come @MyCustomAnnotation (true) anziché @MyCustomAnnotation (myType = true).

See this example for more details

Problemi correlati