作者gasbomb (虛空雷神獸)
看板java
標題Re: [問題] 使用JSQLParser,要將抓出來的where子句
時間Fri Feb 18 19:20:29 2022
因為 java 對 closure 的規範就是你不能夠去變更 local variable 的 value
這種情境我一律推薦寫一個 class 去包裝
像這樣
class StringValue {
private String value = "";
void set(String value) {
this.value = value;
}
String get() {
return value;
}
}
你只要把你的 left 改成這個物件就可以了
補充說明一下匿名內部類別不能修改 local variable 的原因
因為 local variable 是儲存在 stack 的
當你 call 匿名內部類別的 method 時就開了一個新的 stack
參考到的 value 會 copy 一份到新的 stack
這時候你重新 assign 也沒辦法改變原本變數的 value
類似這種狀況
int a = 10;
int aPrime = a;
aPrime = 5;
System.out.println(a) // 10
所以 java 才會要求被匿名內部類別參考到的區域變數必須要是 final 的
--
╔═◢ ◣═╦╦═════╦═════╗
║
◤◤◤ ◥ ╠╣
飛鳥ももこ╠═╗ ║
║ ▇ ▇ ║╚═════╝ ╚═╦═╣
║ ▌ ● ● ▌ ║╔══════╗╔═╩═╣
║
◤ ◥
︺█◤
◥╠╣
Momoko Asuka╠╝ ║
╚◣◢ ▄▂▄ ◣◢╩╩══════╩════╝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.147.192 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1645183233.A.0FA.html
※ 編輯: gasbomb (111.249.122.248 臺灣), 02/19/2022 02:00:50