对于我的Google Wave机器人,在onDocumentChanged事件中,我想按如下方式应用过滤器:
@Capability(filter = FILTER)
@Override
public void onDocumentChanged(DocumentChangedEvent event) {
...
}
我想在第一次运行机器人时生成过滤器,我正在尝试按如下方式执行:
private static final String FILTER = generateFilter();
private static final String generateFilter(){
...
}
然而,它抱怨在@Capability中使用时,FILTER不是常量表达式。
每次调用时,generateFilter()都会返回相同的字符串,我只是用它来创建字符串,这样当我进行更改时,我不需要担心更新过滤器。
现在我可能会发现这一切都错了,所以想知道是否有人知道我做错了什么,或者知道一种更好的方法,我可以从函数中生成一个常量表达式。
答案 0 :(得分:1)
我不熟悉Google Wave,但可能会接受static initializer,如here所示,并在下面概述。
private static final String FILTER;
static { FILTER = "..."; }
附录:经过仔细审查,这种方法不可能,因为annotation value必须(除其他事项外)constant expression。
答案 1 :(得分:0)
编译器在编译时需要注释中的内容值,并且我认为在应用程序初始化时会发生初始化。
你可能会这样做:
private static final String FILTER = "YOUR STRING";
private static final String generateFilter() {
return FILTER;
}
这样一来,如果你需要改变它而不用担心,你将使用方法并从那里转到常数值:)。