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.

Foi útil?

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 :).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top