1

最初に言っておきますが、これを Google で検索しようとしましたが、何を探しているのかよくわかりません。セッターメソッドを使用できることは理解していますが、フィールドに直接アクセスする方法はありますか?

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>() { //... }。これらは匿名クラス内で宣言されていないため、コンパイラはそれらを解決できません。そのため、おそらくエラーが発生しています。キーワードを追加し、 -keywordfinalなしで変数にアクセスします。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を参照してください。

編集:

また、あいまいな名前 (パラメーター リストとメソッド変数) にも注意してください。

于 2013-01-03T14:50:19.203 に答える
0

クラスの名前をthis.token使用するOuterClass.this.token代わりにOuterClass

于 2013-01-03T14:48:32.280 に答える