Pregunta Valor "nulo" predeterminado de la anotación


¿Es posible especificar una anotación con nulo como valor predeterminado?

Lo que quiero lograr es algo así como atributos de anotación opcionales.

Por ejemplo

public @interface Foo {

   Config value();

}


public @interface Config {

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

Me gustaría utilizar @Foo (sin especificar el valor, por lo que debería ser un tipo de opción) y también me gustaría poder escribir algo como esto:

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

¿Es posible hacer algo como esto con anotaciones?

No quiero hacer algo como esto     public @interface Foo {

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

porque quiero poder distinguir si una propiedad se ha configurado o no (y no si tiene el valor predeterminado o no).

Es un poco complicado de describir, pero estoy trabajando en un pequeño procesador de anotaciones que genera código Java. Sin embargo, en el tiempo de ejecución me gustaría configurar una configuración predeterminada que se debe usar para todos @Foo, excepto aquellos que han configurado su propia configuración con @Config.

entonces lo que quiero es algo como esto:

public @interface Foo {

       Config value() default null;

 }

Pero hasta donde sé, no es posible, ¿verdad? ¿Alguien sabe una solución alternativa para dicho atributo opcional?


11
2017-07-10 16:01


origen


Respuestas:


No, no puedes usar null para un valor de atributo de anotación. Sin embargo, puede usar un tipo de matriz y proporcionar una matriz vacía.

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

o

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

22
2017-07-10 16:05