2016-10-12 3 views
1

J'ai une annotation qui nécessite une chaîne de constante de compilation et que je voulais initialiser avec une constante de compilation int de l'un des bibliothèques que j'utilise. Donc ce que je fini par faire était quelque chose comme ceci:Convertir une constante de temps de compilation en chaîne de constante de compilation en Java

public class LibraryClass { 
    public static int CONSTANT_INT = 0; //Where 0 could be whatever 
} 

public class MyClass { 
    private static final String CONSTANT_STRING = "" + LibraryClass.CONSTANT_INT; 

    @AnnotationThatNeedsString(CONSTANT_STRING) 
    public void myMethod() { 
     //Do something 
    } 
} 

Ma question est, est-il une meilleure façon de convertir des primitives de compilation constante de temps que d'utiliser des chaînes "" + PRIMITIVE_TO_CONVERT? Un moyen de "lancer" une primitive à String? Parce que faire comme ça est un peu bizarre.

Répondre

1

Je pense que votre solution actuelle est la meilleure, car vous avez correctement déterminé que les annotations nécessitent des valeurs de "constante de compilation". "" + INT_VALUE est au moins préférable à la création de redondance en répétant la valeur de la bibliothèque, mais en tant que chaîne ("23"), et c'est une fonctionnalité «agréable» du langage Java pour déterminer votre solution en tant que constante de compilation. Si vous le pouvez, vous pouvez bien sûr aussi changer l'annotation pour prendre un int comme paramètre de valeur, comme suggéré dans une autre réponse (mais je suppose que l'annotation vient aussi d'une bibliothèque?).

0

Essayez d'utiliser String.valueOf (LibraryClass.CONSTANT_INT);

+1

Mais cela ne peut pas être utilisé directement dans l'annotation, uniquement dans l'initialisation CONSTANT_STRING. –

+0

Est-ce que "private static final Chaîne CONSTANT_STRING = String.valueOf (LibraryClass.CONSTANT_INT);" n'est pas applicable? – Anthony

+0

Oui, cela fonctionnera et est une réponse correcte. Mais je pense que le créateur de la question a demandé quelque chose comme @AnnotationThatNeedsString (someCleverCastOf (CONSTANT_INT)). –

0

Je suggère

  • make @AnnotationThatNeedsString prendre un int ou
  • faire la corde constante. Vous pouvez l'analyser comme un int à l'exécution.

par exemple.

public static int CONSTANT_INT = Integer.parseInt(CONSTANT_STRING);