Java类名称作为注释属性

Ras*_*nke 6 java annotations

是否可以在注释中使用类的简单名称?我的目标是使用包含该类的JNDI名称来获得注入的编译时安全性.

示例(我想要做的,这在编译时失败):

@EJB(mappedName = "java:module/" + MyService.class.getSimpleName())
private MyService myService;
Run Code Online (Sandbox Code Playgroud)

class.getSimpleName()似乎在运行时被解析,这不适用于注释.我可以以某种方式将它作为常量吗?

Raj*_*aji 0

按照你的方式不可能。这可以通过 AOP 技术来完成。但,

@EJB(mappedName = "java:module/" + MyService.class.getSimpleName())
private MyService myService;
Run Code Online (Sandbox Code Playgroud)

在这段代码中,您似乎只有一个可能的值,即“MyService”。它不会动态改变,那么为什么要动态评估它呢?

  • 如果我在某个时候重命名这个类,我希望编译时安全。必须手动更改字符串,而对类名的引用要么会自动重构,要么会给出编译计时器错误。 (9认同)