Deshágase del mensaje “El valor para el atributo de anotación debe ser una expresión constante”

Uso una anotación en mi código e bash usar el valor que determina en tiempo de ejecución.

Defino mi lista como static final (lst) y agrego a esta lista algunos elementos.

Cuando uso lst.get(i) , obtengo un error de comstackción:

 The value for annotation attribute must be a constant expression 

¿Cuál es la solución para este problema?

El valor de una anotación debe ser una constante de tiempo de comstackción, por lo que no hay una forma simple de hacer lo que está intentando hacer.

Vea también aquí: Cómo proporcionar valor a una anotación de un java constante

Es posible utilizar algunas herramientas de tiempo de comstackción (ant, maven?) Para configurarlo si se conoce el valor antes de intentar ejecutar el progtwig.

es una restricción sin sentido; solo porque se implementó de esa manera no significa que sea la correcta. quizás ellos hayan querido ir por fases y hayan implementado por primera vez las restricciones de validación en el tiempo de comstackción, pero eso no significa que debamos detenernos allí y pensar en su inflexibilidad.

Creo que es hora de que aumentemos el ruido sobre la necesidad de validar las restricciones en tiempo de ejecución, incluso si se produce un pequeño golpe de rendimiento. esas restricciones que tienen valores de tiempo de comstackción se deben validar usando implementaciones de comstackdor de tiempo de comstackción y las que tienen valores de tiempo de ejecución deben validarse utilizando implementaciones de validador en tiempo de ejecución.

Deberíamos plantear una solicitud de mejora con el comité de expertos JSR 303 para esta adición de funciones o tal vez esta sea una limitación de la función Anotación en sí misma, por lo que la solicitud debe enviarse al grupo de expertos JSR-250 si aún está vigente.

Esto es lo que parece una expresión constante en Java:

 package com.mycompany.mypackage; public class MyLinks { // constant expression public static final String GUESTBOOK_URL = "/guestbook"; } 

Puede usarlo con anotaciones de la siguiente manera:

 import com.mycompany.mypackage.MyLinks; @WebServlet(urlPatterns = {MyLinks.GUESTBOOK_URL}) public class GuestbookServlet extends HttpServlet { // ... }