2010-06-11 3 views
1

Pour mon robot Google Wave, l'événement onDocumentChanged je veux appliquer un filtre comme suit:Générer une expression constante d'une fonction

@Capability(filter = FILTER) 
@Override 
public void onDocumentChanged(DocumentChangedEvent event) { 
    ... 
} 

Je veux que le filtre à générer la première fois que le robot est exécuté , que je suis en train de faire comme suit:

private static final String FILTER = generateFilter(); 

private static final String generateFilter(){ 
    ... 
} 

Cependant, il se plaint FILTER est pas une expression constante lorsqu'elle est utilisée dans les @Capability. GenerateFilter() retournera la même chaîne chaque fois qu'elle est appelée, je l'utilise seulement pour créer la chaîne de sorte que lorsque je fais des changements, je n'ai pas besoin de me soucier de mettre à jour le filtre.

Maintenant, je pourrais aller à ce sujet tout faux, donc je me demandais si quelqu'un savait ce que je fais mal, ou savait une meilleure façon de générer une expression constante de la fonction.

Répondre

1

Je ne suis pas familier avec Google Wave, mais un static initializer pourrait être acceptable, comme indiqué here et décrit ci-dessous.

private static final String FILTER; 
static { FILTER = "..."; } 

Addendum: Sur un examen plus approfondi, cette approche est pas possible, en tant que annotation value doit être (entre autres) un constant expression.

0

Le compilateur a besoin de la valeur de contant dans l'annotation au moment de la compilation et votre initialisation se produira je pense à l'heure d'initialisation de l'application.

Vous pourriez probablement faire comme ceci:

private static final String FILTER = "YOUR STRING"; 

private static final String generateFilter() { 
    return FILTER; 
} 

De cette façon, si vous avez besoin de le changer et vous inquiétez pas, vous allez la la méthode et de là à la valeur constante :).

Questions connexes