1

对于我的 Google Wave 机器人,我想在 onDocumentChanged 事件中应用如下过滤器:

@Capability(filter = FILTER)
@Override
public void onDocumentChanged(DocumentChangedEvent event) {
    ...
}

我希望在机器人第一次运行时生成过滤器,我正在尝试执行以下操作:

private static final String FILTER = generateFilter();

private static final String generateFilter(){
    ...
}

但是,它抱怨 FILTER 在@Capability 中使用时不是一个常量表达式。

generateFilter() 每次调用都会返回相同的字符串,我只是用它来创建字符串,这样当我进行更改时,我不需要担心更新过滤器。

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

4

2 回答 2

1

我不熟悉 Google Wave,但静态初始化程序可能是可以接受的,如下所示概述。

private static final String FILTER;
static { FILTER = "..."; }

附录:经过仔细审查,这种方法是不可能的,因为注释值必须(除其他外)是一个常量表达式

于 2010-06-11T23:15:00.580 回答
0

编译器在编译时需要注释中的常量值,我认为您的初始化将在应用程序初始化时发生。

你可能可以这样做:

private static final String FILTER = "YOUR STRING";

private static final String generateFilter() {
   return FILTER;
}

这样,如果您需要更改它并且不用担心,您将使用该方法并从那里转到常量值:)。

于 2010-06-11T23:15:37.347 回答