1

首先让我说我确实尝试过用谷歌搜索这个,但我不确定我在寻找什么。我知道我可以使用 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
   }
});

你能帮助我吗?!

谢谢!

鲍勃

4

2 回答 2

4

在变量前面使用关键字this,表示要访问实例字段。在这种情况下,您要访问的字段将属于匿名类实例new TokenHandler<String>() { //... }。由于它们没有在匿名类中声明,编译器无法解析它们。这就是为什么您可能会遇到错误。添加关键字final并访问不带this-keyword 的变量:

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请参阅问题。

编辑:

此外,请注意模棱两可的名称(参数列表与方法变量)。

于 2013-01-03T14:50:19.203 回答
0

而不是this.token使用OuterClass.this.tokenwhereOuterClass是你的班级的名字

于 2013-01-03T14:48:32.280 回答