从函数生成常量表达式

时间:2010-06-11 20:57:22

标签: java google-wave

对于我的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()都会返回相同的字符串,我只是用它来创建字符串,这样当我进行更改时,我不需要担心更新过滤器。

现在我可能会发现这一切都错了,所以想知道是否有人知道我做错了什么,或者知道一种更好的方法,我可以从函数中生成一个常量表达式。

2 个答案:

答案 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;
}

这样一来,如果你需要改变它而不用担心,你将使用方法并从那里转到常数值:)。