106 votes

Débarrassez-vous du message "La valeur de l'attribut d'annotation doit être une expression constante".

J'utilise une annotation dans mon code, et j'essaie d'utiliser la valeur qui est déterminée au moment de l'exécution.

Je définis ma liste comme suit static final (lst), et j'ajoute à cette liste quelques éléments.

Quand j'utilise lst.get(i) j'obtiens une erreur de compilation :

The value for annotation attribute must be a constant expression

Quelle est la solution à ce problème ?

68voto

Ziyao Wei Points 13591

La valeur d'une annotation doit être une constante de compilation. Il n'existe donc pas de moyen simple de réaliser ce que vous essayez de faire.

Voir aussi ici : Comment fournir une valeur à une annotation à partir d'une constante java

Il est possible d'utiliser certains outils de compilation (ant, maven ?) pour le configurer si la valeur est connue avant d'essayer d'exécuter le programme.

31voto

Benny Neugebauer Points 5393

Voici à quoi ressemble une expression constante en Java :

package com.mycompany.mypackage;

public class MyLinks {
  // constant expression
  public static final String GUESTBOOK_URL = "/guestbook";
}

Vous pouvez l'utiliser avec des annotations comme suit :

import com.mycompany.mypackage.MyLinks;

@WebServlet(urlPatterns = {MyLinks.GUESTBOOK_URL})
public class GuestbookServlet extends HttpServlet {
  // ...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X