![](/img/trans.png)
[英]local variables referenced from an inner class must be final or effectively final
[英]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.