【问题标题】:Use UUID in annotation interface as default value使用注解界面中的 UUID 作为默认值
【发布时间】:2020-05-26 02:06:54
【问题描述】:

可以在注解属性中使用 UUID 吗?我尝试在注释中添加 UUID 作为属性,如下所示,但它给了我错误Attribute value must be constant.

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    String name() default "";

    UUID guid() default UUID.random(); // there I have error
}

我还尝试了至少 null instad 的随机 UUID 但同样的错误。

谢谢。

【问题讨论】:

    标签: java java-8 java-annotations


    【解决方案1】:

    查看注释文档 (here's Wikipedia):

    返回类型仅限于原始类型、字符串、类、枚举、注释和上述类型的数组。

    您可以将定义更改为

    String guid() default UUID.random().toString();
    

    感谢 Holger 指出:这也行不通。该错误告诉您该值必须是constant,即根本不是方法调用。

    【讨论】:

    • 你不能指定像UUID.random().toString()这样的表达式作为默认值。
    • @Holger 我也尝试用静态最终定义常量并设置值,但结果相同
    • 要定义一个常量,仅仅有一个final变量是不够的,它还必须有一个初始化器,它也是一个编译时常量。很明显,UUID.random().toString() 在语义上不能是一个常量。您可以使用String guid() default "";,并留给代码使用注解在字符串为空时生成新的随机UUID。
    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多