This question already has answers here: How to supply value to an annotation from a Constant java (6 answers) Closed 3 years ago.
I use annotation in my code, and I try to use value which determine in run time.
I define my list as static final
(lst), and I add to this list some elements.
When I use lst.get(i)
, I get compilation error:
The value for annotation attribute must be a constant expression
What is the solution for this issue?
The value for an annotation must be a compile time constant, so there is no simple way of doing what you are trying to do.
See also here: How to supply value to an annotation from a Constant java
It is possible to use some compile time tools (ant, maven?) to config it if the value is known before you try to run the program.
This is what a constant expression in Java looks like:
package com.mycompany.mypackage;
public class MyLinks {
// constant expression
public static final String GUESTBOOK_URL = "/guestbook";
}
You can use it with annotations as following:
import com.mycompany.mypackage.MyLinks;
@WebServlet(urlPatterns = {MyLinks.GUESTBOOK_URL})
public class GuestbookServlet extends HttpServlet {
// ...
}
GUESTBOOK_URL = "book" + MyEnum.Field
, is that possible?
final
is generally not compile time constant. This won't work for a List. The code is misleading, for it only works, because the string in the class is a compile time constant.
Success story sharing