Генерировать постоянное выражение от функции

StackOverflow https://stackoverflow.com/questions/3026197

  •  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;
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top