Создать выражение константы из функции - PullRequest
1 голос
/ 12 июня 2010

Для моего робота Google Wave к событию onDocumentChanged я хочу применить фильтр следующим образом:

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

Я хочу, чтобы фильтр был создан при первом запуске робота, который япытается сделать следующее:

private static final String FILTER = generateFilter();

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

Однако он жалуется, что FILTER не является константным выражением при использовании в @ Capability.

generateFilter () будет возвращать одну и ту же строку каждый раз, когданазывается, я использую его только для создания строки, так что, когда я делаю изменения, мне не нужно беспокоиться об обновлении фильтра.

Теперь я могу все об этом сказать неправильно, так что интересно, есликто-нибудь знал, что я делаю неправильно, или знал, как лучше создать постоянное выражение из функции.

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Я незнаком с Google Wave, но статический инициализатор может быть приемлемым, как показано здесь и обрисовано в общих чертах ниже.

Добавление: При более тщательном рассмотрении этот подход не возможен, поскольку значение аннотации должно быть (среди прочего) константное выражение .

0 голосов
/ 12 июня 2010

Компилятору нужно значение константы в аннотации во время компиляции, и ваша инициализация произойдет, я думаю, во время инициализации приложения.

Возможно, вы могли бы сделать это так:

private static final String FILTER = "YOUR STRING";

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

Таким образом, если вам нужно изменить его и не беспокоиться, вы перейдете к методу и оттуда к постоянному значению:).

...