如何在Java注释参数中接受多个类型?

时间:2011-12-01 23:05:51

标签: java annotations

我想在键字符串上使用注释来配置该键的属性的初始值。如,

@NodeProperty(initialValue = "bar") static final String "FOO";

其他代码稍后处理注释,如果键“FOO”尚不存在,则将值“bar”的键“FOO”添加到特定键值存储区。

我的注释声明是:

@Retention(RetentionPolicy.RUNTIME)
@interface NodeProperty {
    long initialValue();  // I want to accept Strings, ints, byte[], etc. here.
}

但是,我提前不知道initialValue的类型。我想接受所有原语,字符串和这些的数组。

关于如何实现这一目标的任何想法?

修改

不幸的是,听起来重载注释参数目前是不可能的。以下答案包含各种解决方法。

2 个答案:

答案 0 :(得分:2)

接受单一类型(可能是String)并使用类型转换将其从您到达的字段中获取。类似于Commons BeanUtils或XWork允许注册类型转换器从字符串形式值到任意Java类的方式。

答案 1 :(得分:1)

您可以为不同类型设置不同的属性,然后检查哪个属性在代码中有值。因此,您可能拥有initialInt,initialString,initial(...)而不是initialValue。很麻烦,但我能想到的另一种方法是始终使用String值,然后从中解析特定类型。

另一个选择可能是撤销您的声明。是否有注释中的键,以及作为注释变量的值?