Java 中的类型安全枚举
不确定标题是否有误导性,但要求如下。
我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE 给出
java属性值必须是常量。
@test("test") // works
@test(Const.myEnum.test.toString()) //java attribute value must be constant
我读到了字符串值不可变的重要性。是否可以通过枚举来实现(而不是公共静态最终字符串黑客)。
谢谢。
Not sure whether the title is misleading, but requirement is below.
I need to use a string value as input to a custom annotation. When use an enum value, the IDE gives
java attribute value must be constant.
@test("test") // works
@test(Const.myEnum.test.toString()) //java attribute value must be constant
I read about the importance of the string value being immutable. Is it possible to achive through enum (not the public static final String hack).
thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
枚举可以在注释中使用。你应该这样做:
假设你已经定义了一个这样的枚举:
和这样的注释:
Enums can be used in annotations. You should do it like this:
assuming you have defined an enum like this:
and the annotation like this:
使用
enum
应该不会有任何问题,问题可能在于您如何声明它或注释。这是一个编译没有任何问题的示例。There shouldn't be any problem using an
enum
, the issue might be with how you are declaring it or the annotation. Here is an example that compiles without any issue.如果注释在您的控制范围内,请将属性类型设置为
enum
类型,而不是String
。否则是不可能的。此外,与每个 java 类一样,注释应以大写字母开头(即
Test
,而不是test
):If the annotation is within your control, make the attribute type be an
enum
type instead ofString
. Otherwise it is not possible.Also, the annotation, as every java class, should start with upper-case (i.e.
Test
, nottest
):如果您希望将注释参数限制为枚举类型的值,请将该类型指定给参数,而不是字符串。枚举类型就是枚举类型,并且无法回避调用“toString”不是“常量”转换这一事实。
If you want the annotation parameter to be restricted to values of an enum type, then give that type to the parameter, not String. An enum type is an enum type, and there's no way around the fact that calling "toString" is not a "constant" transformation.
参数不能是方法的结果,即 toString()
但您应该能够使用枚举常量。
The parameter must not be the result of a method, i.e. toString()
But you should be able to use the enum constants.