不确定标题是否具有误导性,但要求如下。
我需要使用字符串值作为自定义注释的输入。使用枚举值时,IDE会给出
java属性值必须是常量。
@test("test") // works
@test(Const.myEnum.test.toString()) //java attribute value must be constant
我读到了字符串值不可变的重要性。是否有可能通过枚举(而不是公共静态最终String hack)。
感谢。
答案 0 :(得分:6)
枚举可用于注释。你应该这样做:
@test(Const.myEnum.test)
假设您已经定义了这样的枚举:
package Const;
public enum myEnum {
test;
}
和这样的注释:
public @interface test {
myEnum value();
}
答案 1 :(得分:3)
使用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() {
//...
}
}
答案 2 :(得分:1)
如果注释在您的控件范围内,请将属性类型设为enum
类型,而不是String
。否则就不可能。
此外,注释,如每个java类,应以大写字母开头(即Test
,而不是test
):
// retention, target here
public @interface Test {
YourEnum value();
}
答案 3 :(得分:0)
如果希望将注释参数限制为枚举类型的值,则将该类型赋予参数,而不是String。枚举类型是枚举类型,并且无法解决调用“toString”不是“常量”转换的事实。
答案 4 :(得分:0)
参数不能是方法的结果,即toString()
但是你应该能够使用枚举常量。