Java中的类型安全枚举

Java中的类型安全枚举,java,enums,annotations,Java,Enums,Annotations,不确定标题是否有误导性,但要求如下 我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE给出 java属性值必须是常量 我了解到字符串值不可变的重要性。是否有可能通过enum(而不是公共静态最终字符串破解)实现 谢谢。如果要将注释参数限制为枚举类型的值,请将该类型指定给参数,而不是字符串。枚举类型是枚举类型,无法回避调用“toString”不是“常量”转换的事实。参数不能是方法的结果,即toString() 但是您应该能够使用枚举常量。如果批注在您的控制范围内,请将属性类型设置为enu

不确定标题是否有误导性,但要求如下

我需要使用字符串值作为自定义注释的输入。当使用枚举值时,IDE给出

java属性值必须是常量

我了解到字符串值不可变的重要性。是否有可能通过enum(而不是公共静态最终字符串破解)实现


谢谢。

如果要将注释参数限制为枚举类型的值,请将该类型指定给参数,而不是字符串。枚举类型是枚举类型,无法回避调用“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() {
        //...
    }

}

谢谢我无法更改注释的定义,因此我猜您断言该用法是不可能的!