为什么以下代码编译:
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
答案 0 :(得分:4)
Eclipse在错误消息中要求的常量表达式是编译时常量表达式(不仅仅是最终变量),并且需要在运行时评估方法调用UUID.randomUUID().toString();
。
虽然您可以write dynamic annotation values using JavaAssist at runtime,但您将失去注释的“易于阅读”功能。