这个问题在这里已经有了答案:How to provide value to an annotation from an Constant java (6 answers) 3年前关闭。
我在代码中使用注释,并尝试使用在运行时确定的值。
我将我的列表定义为 static final
(lst),并在此列表中添加了一些元素。
当我使用 lst.get(i)
时,我得到编译错误:
The value for annotation attribute must be a constant expression
这个问题的解决方案是什么?
注释的值必须是编译时间常数,因此没有简单的方法可以做您想做的事情。
参见此处:How to supply value to an annotation from a Constant java
如果在尝试运行程序之前知道该值,则可以使用一些编译时工具(ant,maven?)来配置它。
这就是 Java 中的常量表达式的样子:
package com.mycompany.mypackage;
public class MyLinks {
// constant expression
public static final String GUESTBOOK_URL = "/guestbook";
}
您可以将其与注释一起使用,如下所示:
import com.mycompany.mypackage.MyLinks;
@WebServlet(urlPatterns = {MyLinks.GUESTBOOK_URL})
public class GuestbookServlet extends HttpServlet {
// ...
}
GUESTBOOK_URL = "book" + MyEnum.Field
怎么样,这可能吗?
final
通常不是编译时间常数。这不适用于列表。该代码具有误导性,因为它只起作用,因为类中的字符串是编译时常量。
不定期副业成功案例分享