首先让我说我确实尝试过Google,但我不确定我在寻找什么。我知道我可以使用setter方法,但有没有办法直接访问字段?
List<String> token = new ArrayList<String>();
List<String> lemma = new ArrayList<String>();
List<String> pos = new ArrayList<String>();
tt.setHandler(new TokenHandler<String>() {
@Override
public void token(final String token, final String pos, final String lemma) {
this.token.add(token); // cannot be resolved or is not a field
this.lemma.add(lemma); // cannot be resolved or is not a field
this.pos.add(pos); // cannot be resolved or is not a field
}
});
你能帮助我吗?!
谢谢!
鲍勃
答案 0 :(得分:4)
在变量前面使用关键字this
表示您要访问实例字段。在这种情况下,您要访问的字段将属于匿名类实例new TokenHandler<String>() { //... }
。由于它们未在匿名类中声明,因此编译器无法解析它们。这就是为什么你可能会收到错误。
添加关键字final
并访问不带this
- 关键字的变量:
final List<String> tokens = new ArrayList<String>();
final List<String> lemmas = new ArrayList<String>();
final List<String> positions = new ArrayList<String>();
tt.setHandler(new TokenHandler<String>() {
@Override
public void token(final String token, final String pos, final String lemma) {
tokens.add(token);
lemmas.add(lemma);
positions.add(pos);
}
});
有关您需要final
的原因的详细信息,请参阅this问题。
修改强>
另外,请注意不明确的名称(参数列表与方法变量)。
答案 1 :(得分:0)
而不是使用this.token
使用OuterClass.this.token
,其中OuterClass
是您班级的名称