为什么我不能计算常量注释参数?

时间:2012-02-05 03:00:21

标签: java annotations

为什么以下代码编译:

final String name = "works";
@Provides @Named(name) String provideAboutTitle() {
   return "ABC";
}

但是下面的代码失败了(至少使用Eclipse的编译器):

final String name = UUID.randomUUID().toString();
@Provides @Named(name) String provideAboutTitle() {
   return "ABC";
}

Eclipse的编译器返回以下错误:

The value for annotation attribute Named.value must be a constant expression

1 个答案:

答案 0 :(得分:4)

Eclipse在错误消息中要求的常量表达式是编译时常量表达式(不仅仅是最终变量),并且需要在运行时评估方法调用UUID.randomUUID().toString();

虽然您可以write dynamic annotation values using JavaAssist at runtime,但您将失去注释的“易于阅读”功能。