查看完整版本: [求助]匿名內部類如何調用非final的變數?[已解決]
頁: [1]

ahway9988 發表於 2018-11-16 10:31 AM

[求助]匿名內部類如何調用非final的變數?[已解決]

本帖最後由 ahway9988 於 2018-11-18 11:56 AM 編輯

(由於中刮號似乎會被去除,只好用貼圖方式,不便見諒orz)


但個編輯器告訴我 local variables referenced from an inner class must be final or effectively final

跟我之前上的進修課說到 匿名內部類使用變數要把它視為final
是不是一樣的意思?
但我要如何做到在匿名內部類 去存取 Base.currentBase=Base.base; 這樣的動作?

我的目的是 要在這個事件裡做到 點擊Label後 取得我點到什麼物件 ,然後可以在其它空間 將這個物件再複制一份放下去
就像 小畫家 你點中上方功能清單的物件 在下方可以繪圖的空間裡 放下那個物件差不多意思,但這裡是想模擬 小遊戲建築的動作


感謝大大們的救助  orz


文字文件




.



大概解決的方式可以在 叫用匿名內部類前
先使  final int finalI=i;
然後在 Base.currentBase=Base.base; 就能解決那個問題了



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

kwj 發表於 2018-11-16 11:13 AM

建議先嘗試了解一下為什麼 Java 一開始會要求必須要 final 變數才能被匿名函數存取,例如:

Why are only final variables accessible in anonymous class?
https://stackoverflow.com/questions/4732544

然後~錯誤訊息中有提示「must be final or effectively final」,也就是允許的範圍是 final 或者 effectively final,搭配如果已經理解了為什麼一開始要限制 final,應該就能了解在什麼情況下能夠存取了。

Difference between final and effectively final
https://stackoverflow.com/questions/20938095...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ahway9988 發表於 2018-11-18 11:52 AM

kwj 發表於 2018-11-16 11:13 AM static/image/common/back.gif
建議先嘗試了解一下為什麼 Java 一開始會要求必須要 final 變數才能被匿名函數存取,例如:

Why are only  ...

大概知道一些原因了 感謝^^
頁: [1]