Gerar uma expressão constante de uma função
-
26-09-2019 - |
Pergunta
Para o meu robô do Google Wave, no evento OndocumentChanged, quero aplicar um filtro da seguinte maneira:
@Capability(filter = FILTER)
@Override
public void onDocumentChanged(DocumentChangedEvent event) {
...
}
Quero que o filtro seja gerado na primeira vez que o robô é executado, o que estou tentando fazer o seguinte:
private static final String FILTER = generateFilter();
private static final String generateFilter(){
...
}
No entanto, ele reclama o filtro não é uma expressão constante quando usada em @capabilidade.
GenerateFilter () retornará a mesma string toda vez que é chamada, só o uso para criar a string para que, quando fizer alterações, não preciso me preocupar em atualizar o filtro.
Agora, eu poderia estar fazendo isso errado, então me perguntei se alguém sabia o que estou fazendo de errado ou sabia uma maneira melhor pela qual eu poderia gerar uma expressão constante a partir da função.
Solução
Não estou familiarizado com o Google Wave, mas um Inicializador estático pode ser aceitável, como mostrado aqui e descrito abaixo.
private static final String FILTER;
static { FILTER = "..."; }
Adendo: em um exame mais minucioso, essa abordagem é não possível, como um valor de anotação deve ser (entre outras coisas) um expressão constante.
Outras dicas
O compilador precisa do valor do contante na anotação no momento da compilação e sua inicialização acontecerá, acho que no tempo de inicialização do aplicativo.
Você provavelmente poderia fazer assim:
private static final String FILTER = "YOUR STRING";
private static final String generateFilter() {
return FILTER;
}
Dessa forma, se você precisar alterá -lo e não se preocupar, irá o método e de lá para o valor constante :).