2009-08-31 26 views
52

he definido mi propia anotación personalizadajava anotación personalizado: crea un atributo opcional

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

cómo, en todo caso, puedo hacer que el atributo opcional

+0

Thanks; No sé si el atributo es obligatorio para declarar si no se proporciona 'predeterminado' :) –

Respuesta

84

Puede provide a default value para el atributo:

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

lo encontré antes que usted, pero creo que es justo seleccionar su respuesta – flybywire

+4

@flybywire ¿Cómo puede decir que lo encontró antes de Dan como usted respondió a las 15:18 mientras respondía a las 15:17? – redochka

+8

Quizás Dan escriba más rápido :-) –

2

Lo encontraste. No puede ser opcional, sino un defecto puede ser declarado como esto:

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

Si no tiene valor predeterminado puede tener sentido como valor de "vacío", entonces eso es un problema.

+0

Si necesita una clase predeterminada, y es posible que necesite String.class como valor, considere usar java.util.Void.class en su lugar (ya que no puede crear instancias o utilizarlo de otra manera)) – Ajax

1

Para el atributo opcional, debe proporcionar el valor predeterminado para ese atributo, puede proporcionar el valor predeterminado con la palabra clave "predeterminada".

Nota: Para un solo atributo, puede usar el nombre del atributo como valor. Si usa su nombre de atributo como valor, puede pasar directamente un valor como este @MyCustomAnnotation (verdadero) en lugar de @MyCustomAnnotation (myType = true).

See this example for more details

Cuestiones relacionadas