Java中的类型安全枚举
不确定标题是否有误导性,但要求如下 我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE给出 java属性值必须是常量 我了解到字符串值不可变的重要性。是否有可能通过enum(而不是公共静态最终字符串破解)实现Java中的类型安全枚举,java,enums,annotations,Java,Enums,Annotations,不确定标题是否有误导性,但要求如下 我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE给出 java属性值必须是常量 我了解到字符串值不可变的重要性。是否有可能通过enum(而不是公共静态最终字符串破解)实现 谢谢。如果要将注释参数限制为枚举类型的值,请将该类型指定给参数,而不是字符串。枚举类型是枚举类型,无法回避调用“toString”不是“常量”转换的事实。参数不能是方法的结果,即toString() 但是您应该能够使用枚举常量。如果批注在您的控制范围内,请将属性类型设置为enu
谢谢。如果要将注释参数限制为枚举类型的值,请将该类型指定给参数,而不是字符串。枚举类型是枚举类型,无法回避调用“toString”不是“常量”转换的事实。参数不能是方法的结果,即toString()
但是您应该能够使用枚举常量。如果批注在您的控制范围内,请将属性类型设置为
enum
类型,而不是String
。否则这是不可能的
此外,注释和每个java类一样,应该以大写字母开头(即Test
,而不是Test
):
枚举可用于注释中。你应该这样做:
@test(Const.myEnum.test)
package Const;
public enum myEnum {
test;
}
public @interface test {
myEnum value();
}
假设您已定义如下所示的枚举:
@test(Const.myEnum.test)
package Const;
public enum myEnum {
test;
}
public @interface test {
myEnum value();
}
注释如下:
@test(Const.myEnum.test)
package Const;
public enum myEnum {
test;
}
public @interface test {
myEnum value();
}
使用
枚举应该不会有任何问题,问题可能在于如何声明它或注释。下面是一个编译时没有任何问题的示例
@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() {
//...
}
}
谢谢我无法更改注释的定义,因此我猜您断言该用法是不可能的!