Generare un'espressione costante da una funzione
-
26-09-2019 - |
Domanda
Per il mio robot di Google Wave, l'evento onDocumentChanged voglio applicare un filtro come segue:
@Capability(filter = FILTER)
@Override
public void onDocumentChanged(DocumentChangedEvent event) {
...
}
Voglio il filtro da generare la prima volta che il robot viene eseguito, che sto cercando di fare nel modo seguente:
private static final String FILTER = generateFilter();
private static final String generateFilter(){
...
}
Tuttavia, si lamenta filtro non è un'espressione costante quando utilizzato entro @Capability.
generateFilter () restituirà la stessa stringa ogni volta che viene chiamato, sto solo usando per creare la stringa in modo che quando faccio i cambiamenti, non ho bisogno di preoccuparsi per l'aggiornamento del filtro.
Ora potrei andare su questo tutto sbagliato, quindi chiesti se qualcuno sapeva quello che sto facendo male, o conosceva un modo migliore in cui ho potuto generare un'espressione costante dalla funzione.
Soluzione
Sono familiarità con Google Wave, ma un statica inizializzatore potrebbe essere accettabile, come mostrato qui e riportate qui di seguito.
private static final String FILTER;
static { FILTER = "..."; }
Addendum: Su un esame più approfondito, questo approccio è non è possibile, come un valore annotazione deve essere (tra le altre cose) un un'espressione costante .
Altri suggerimenti
Il compilatore ha bisogno il valore contant in l'annotazione in fase di compilazione e la vostra inizializzazione avverrà penso che al momento inizializzazione dell'applicazione.
Si potrebbe probabilmente fare in questo modo:
private static final String FILTER = "YOUR STRING";
private static final String generateFilter() {
return FILTER;
}
In questo modo se avete bisogno di cambiare e non preoccupatevi si andrà il metodo e da lì al valore costante:)
.