摆脱"注释属性的值必须是常量表达式"消息

Con*_*ons 64 java annotations

我在代码中使用注释,并尝试使用在运行时确定的值.

我将我的列表定义为static final(lst),并在此列表中添加一些元素.

当我使用时lst.get(i),我得到编译错误:

The value for annotation attribute must be a constant expression
Run Code Online (Sandbox Code Playgroud)

这个问题的解决方案是什么?

zw3*_*324 46

注释的值必须是编译时常量,因此没有简单的方法来执行您要执行的操作.

另请参见此处:如何从Constant java为注释提供值

如果在尝试运行程序之前知道了值,可以使用一些编译时工具(ant,maven?)来配置它.

  • > 如果在尝试运行程序之前知道该值,则可以使用一些编译时工具(ant、maven?)来配置它。如何? (3认同)

Ben*_*uer 17

这就是Java中的常量表达式:

package com.mycompany.mypackage;

public class MyLinks {
  // constant expression
  public static final String GUESTBOOK_URL = "/guestbook";
}
Run Code Online (Sandbox Code Playgroud)

您可以将其与注释一起使用,如下所示:

import com.mycompany.mypackage.MyLinks;

@WebServlet(urlPatterns = {MyLinks.GUESTBOOK_URL})
public class GuestbookServlet extends HttpServlet {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 问题上下文中“常量”的含义是编译时间常量。`final` 通常不是编译时常量。这不适用于列表。该代码具有误导性,因为它只能起作用,因为类中的字符串是编译时常量。 (4认同)
  • `GUESTBOOK_URL = "book" + MyEnum.Field` 怎么样,可能吗? (2认同)