【问题标题】:Annotation default "null" value注释默认“null”值
【发布时间】:2014-09-01 02:30:45
【问题描述】:

是否可以指定一个默认为空的注解?

我想要实现的是可选的注释属性。

例如

public @interface Foo {

    Config value();

}


public @interface Config {

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

我想使用@Foo(不指定值,所以它应该是某种可选的)并且我也希望能够写这样的东西:

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

用注解可以做这样的事情吗?

我不想做这样的事情

public @interface Foo {

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

因为我希望能够区分属性是否已设置(而不是是否具有默认值)。

描述起来有点复杂,但我正在开发一个可以生成 Java 代码的小注释处理器。但是在运行时我想设置一个默认配置,应该用于所有@Foo,除了那些用@Config设置自己的配置的人。

所以我想要的是这样的:

public @interface Foo {

       Config value() default null;

 }

但据我所知这是不可能的,对吧?有人知道这种可选属性的解决方法吗?

【问题讨论】:

标签: java annotations


【解决方案1】:

不,您不能将null 用于注释属性值。但是,您可以使用数组类型并提供一个空数组。

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

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

【讨论】:

  • 是的,但是我总是必须写@Foo(value = {}),并且在 90% 的使用中我不想提供另一个配置,所以我只想有 @Foo
  • @sockeqwe 就像设置default {} 一样简单。
【解决方案2】:

试试看:

Config value() default @Config();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    相关资源
    最近更新 更多