【发布时间】:2014-06-23 14:30:14
【问题描述】:
我试图做的注释看起来像这样
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.FIELD })
public @interface EnumParameter {
Enum<?>[] disallowedValues() default {};
}
但是,我收到以下错误“注释属性 EnumParameter.disallowedValues 的无效类型 Enum[];仅允许原始类型、字符串、类、注释、枚举或其一维数组”。我打算用它来表示枚举中的某些值对该字段无效。我不知道类型,因为我打算用它来补充 UI 创建,因此可能会遇到任何类型的枚举。
为澄清而编辑。
假设我有一个枚举,
enum Direction{
LEFT, RIGHT, BOTH;
}
我有一个字段,
Direction turnSignal;
我想指出转向灯不能有BOTH。
@EnumParameter(disallowedValues = {Direction.BOTH})
Direction turnSignal;
我已经意识到,到目前为止这似乎是不可能的。是否有理由禁止这样做?以这种方式使用枚举是否被认为是不好的风格?
【问题讨论】:
-
不可能。枚举值必须在编译时已知。
-
枚举中的值是什么意思?
-
@SotiriosDelimanolis 比如说我们有一个枚举Direction,它枚举了LEFT、RIGHT、UP、DOWN;然后我们要注释一个名为 turnSignal 的字段。好吧,turnsignal 是一个方向,但它不能指示向上或向下,所以我想在标签内指示。
-
我认为通过在设置
turnSignal的类方法中执行该逻辑会更好。 -
@SotiriosDelimanolis 注释是为了启用 UI 组件的程序化生成,我宁愿不为这样的所有情况编写特殊处理。
标签: java enums annotations