Frage

Für meine Google Wave-Roboter, auf dem onDocumentChanged Ereignis möchte ich einen Filter anwenden, wie folgt:

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

Ich möchte das Filter erzeugt der Roboter das erste Mal sein wird, laufen, was ich versuche, wie folgt zu tun:

private static final String FILTER = generateFilter();

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

Es ist jedoch beklagt FILTER nicht ein konstanter Ausdruck ist, wenn innerhalb @Capability verwendet.

generateFilter () die gleiche Zeichenfolge zurück, jedes Mal aufgerufen wird, ich verwende es nur um die Zeichenfolge zu erstellen, so dass, wenn ich Änderungen vornehmen, ich habe nicht zu kümmern brauche, um über die Filter zu aktualisieren.

Jetzt kann ich darüber alles falsch gehen, so fragte mich, ob jemand wußte, was ich falsch mache, oder wußte, eine bessere Art und Weise, in der ich einen konstanten Ausdruck aus der Funktion erzeugen könnte.

War es hilfreich?

Lösung

Ich bin nicht vertraut mit Google Wave, sondern ein statische Initialisierer akzeptabel sein könnte, wie gezeigt hier und unten beschrieben.

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

Nachtrag: Bei genauerer Betrachtung ist dieser Ansatz nicht möglich, als Annotation Wert müssen (unter anderem) ein konstante Ausdruck .

Andere Tipps

Der Compiler benötigt den contant Wert in der Anmerkung bei der Kompilierung und Ihre Initialisierung geschieht, i am Anwendungsinitialisierung Zeit denken.

Sie könnten wahrscheinlich es wie folgt tun:

private static final String FILTER = "YOUR STRING";

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

Auf diese Weise, wenn Sie es ändern müssen und sich keine Sorgen Sie die Methode gehen und von dort auf den konstanten Wert:)

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top