覆盖方法 - 类变量

时间:2013-01-03 14:45:47

标签: java

首先让我说我确实尝试过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
   }
});

你能帮助我吗?!

谢谢!

鲍勃

2 个答案:

答案 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是您班级的名称