2014-04-18 32 views
1

我試圖在一個循環內實現一個內部類,並且進入了一個有趣的狀態。內部類有方法,但是,當我嘗試訪問變量時,Netbeans給我一個編譯器錯誤,並告訴我使int最終。將Regular Int轉換爲最終的Java

由於int是一個循環變量,它不能是最終的。我試圖創建新的變量並將它們等同於循環變量,但這仍會引發相同的錯誤。

下面是基本的語法(僞代碼):

for(int i = 0; i < 10; i++) 
{ 
    panels[i].printI(new printI(){System.out.println(i);}); 
} 

任何想法?

+0

難道你不能在循環的第一行使用'final int j = i;'然後將'j'傳遞給'System.out.println '? –

+0

但是,如果我這樣做,那麼循環將無法增加j,因爲值會被鎖定? –

+0

確實如此。請參閱qqilihq的答案。 – captainroxors

回答

5

添加一個臨時final變量來保存的值:

for(int i = 0; i < 10; i++) 
{ 
    final int tmp = i; 
    panels[i].printI(new printI(){System.out.println(tmp);}); 
} 
+0

這個答案提供了一個很好的解決方案,幫助我。感謝您的發表。 –

4

這就是成語:

for(int i = 0; i < 10; i++) 
{ 
    final int j = i; 
    panels[i].printI(new printI(){System.out.println(j);}); 
} 
0

或者使用數組的變體,這樣可以節省一行代碼;)

for(final int[] i = {0}; i[0] < 10; i[0]++) 
{ 
    panels[i[0]].printI(new printI(){System.out.println(i[0]);}); 
} 
+0

oooo我喜歡那個。提供可變性,沒有任何性能損失或包裝對象的複雜性。 – captainroxors