不确定标题是否具有误导性,但要求在下面。Java中的Typesafe枚举
我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE会给出
java属性值必须是常量。
@test("test") // works
@test(Const.myEnum.test.toString()) //java attribute value must be constant
我读到的字符串值是不可改变的重要性。是否有可能通过枚举(而不是公共静态最终字符串黑客)达到目的。
谢谢。
不确定标题是否具有误导性,但要求在下面。Java中的Typesafe枚举
我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE会给出
java属性值必须是常量。
@test("test") // works
@test(Const.myEnum.test.toString()) //java attribute value must be constant
我读到的字符串值是不可改变的重要性。是否有可能通过枚举(而不是公共静态最终字符串黑客)达到目的。
谢谢。
如果注释是你的控制范围之内,使属性类型是enum
类型,而不是String
。否则,这是不可能的。
此外,注释,因为每个Java类,应与大写(即Test
,不test
)开始:
// retention, target here
public @interface Test {
YourEnum value();
}
如果要将annotation参数限制为枚举类型的值,则将该类型赋予该参数,而不是String。枚举类型是一个枚举类型,调用“toString”不是一个“常量”转换的事实是没有办法的。
参数不能是方法的结果,即toString()方法
但是,你应该能够使用枚举常量。
枚举可以注释一起使用。你应该做的是这样的:
@test(Const.myEnum.test)
假设你已经定义了这样一个枚举:
package Const;
public enum myEnum {
test;
}
和注释这样的:
public @interface test {
myEnum value();
}
不应该有任何问题使用enum
,问题可能在于您如何声明它或注释。这里是一个编译没有任何问题的例子。
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface MyAnnotation {
MyEnum value();
public enum MyEnum {
ONE, TWO, THREE, FOUR
}
}
public class AnnotationTest {
@MyAnnotation(MyEnum.ONE)
public void someMethod() {
//...
}
}
+1为详细示例..谢谢 – bsr 2010-08-04 16:22:58
谢谢..我不能改变注释的定义,所以我想你断言这个用法是不可能的! – bsr 2010-08-04 16:22:05