Генерировать постоянное выражение от функции
-
26-09-2019 - |
Вопрос
Для моего робота Google Wave, на OnDocumentChanged Event, я хочу применить фильтр следующим образом:
@Capability(filter = FILTER)
@Override
public void onDocumentChanged(DocumentChangedEvent event) {
...
}
Я хочу, чтобы фильтр был сгенерирован в первый раз, когда робот работает, который я пытаюсь сделать следующим образом:
private static final String FILTER = generateFilter();
private static final String generateFilter(){
...
}
Однако он жалуется фильтра не является постоянным выражением при использовании в пределах @Capability.
GenerateFilter () вернет одну и ту же строку каждый раз, когда он называется, я использую его только для создания строки, чтобы, когда я вножу изменения, мне не нужно беспокоиться об обновлении фильтра.
Теперь я мог бы идти по этому поводу все неправильно, так подумал, знает ли кто-нибудь, что я делаю не так, или знал лучший способ, которым я мог бы создавать постоянное выражение от функции.
Решение
Я не знаком с Google Wave, но Статический инициализатор может быть приемлемым, как показано здесь и изложены ниже.
private static final String FILTER;
static { FILTER = "..."; }
Приложение: на ближе, этот подход нет возможно, как Значение аннотации должно быть (среди прочего) постоянное выражение.
Другие советы
Компилятор нуждается в значении содержимого в аннотации во время компиляции, и произойдет ваша инициализация, я думаю, что по времени инициализации приложения.
Вы, вероятно, могли бы сделать это так:
private static final String FILTER = "YOUR STRING";
private static final String generateFilter() {
return FILTER;
}
Таким образом, если вам нужно изменить его и не беспокоиться, вы пойдете метод и оттуда до постоянного значения :).