簡體   English   中英

為什么會出現“從內部類引用的局部變量必須是最終的”?

[英]Why am I getting “Local variables referenced from an inner class must be final”?

我什至不確定該代碼是否即使它能工作也不會做任何事情,但是我不知道該怎么做才能擺脫“從內部類引用的局部變量必須是最終的或實際上是最終的”錯誤消息,該錯誤消息在以“ fireballRight [i]”開頭的三行中顯示。

Sprite[] fireballRight = new Sprite[50];

public void fireRight() {

    for(int i = 0; i < 50; i++) {
        new AnimationTimer() {
            public void handle() {      

                fireballRight[i].setImage("puercosloco/fireballright.png");                   

                rightx++;
                fireballRight[i].setPosition(rightx, righty);
                fireballRight[i].render(gc, 80, 55);           
            }
        }.start();     
    }   
}

任何指導將不勝感激,谷歌似乎並沒有幫助我這一點。

您尚未顯示所有代碼,但我懷疑添加了以下內容:

final int i0 = i;

在循環中並使用i0而不是i作為數組的索引應該可以修復該錯誤。

另外,如@James_D所評論,您還可以添加Sprite sprite = fireballRight[i]; ;。 在匿名類之前,並在handle方法內使用sprite

請注意,在這種情況下,對於Java 8+, final修飾符是可選的。

如其所說,var i需要具有final前綴。 將代碼更改為以下內容:

    for(int i = 0; i < 50; i++) {
        final int i2 = i;
        new AnimationTimer()
        {
            public void handle()
            {      
                fireballRight[i2].setImage("puercosloco/fireballright.png"); // Use i2 instead of i.

您可以將字段設置為私有和靜態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM