2013-01-03 234 views
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 
    } 
}); 

你能幫幫我嗎?

謝謝!

+0

與'token'一樣刪除'this'訪問 –

+1

在你的函數中,這是TokenHandler的實例。它沒有那3個變量。 –

+0

這可能會幫助你瞭解問題:http://stackoverflow.com/questions/5107158/how-to-pass-parameters-to-anonymous-class – MrSmith42

回答

0

而不是使用this.token使用OuterClass.this.token其中OuterClass是類

+0

變量不是字段。所以這也會導致錯誤。 – Simon

+0

@Simon事實上,他們是實例字段,這就是他提到使用getter方法的原因。 – kaysush

+1

@Suhil你是對的。問題不清楚。代碼表明這些變量是在一個方法中聲明的,但同時他聲明他可以使用getter。如果你編輯你的答案(添加一個空格左右),我可以收回我的downvote。 :-) – Simon

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看到this問題。

編輯:

同時,應注意與ambigous名(參數列表與方法變量)。

+0

+1某些IDE爲此具有自動修復功能。 –

+0

我懷疑你不需要代碼中的評論。 –

+0

'token.add(token);'那會工作嗎? 'token'是一個本地'String'變量... – jlordo