我翻譯一些代碼,從C#與Java封閉,但我得到了一個錯誤,代碼是這樣的:Java和關閉
public ArrayList<String> getData(){
String pSentence = "SELECT * FROM EMPLOYEES";
ArrayList<String> pList = null;
_con.queryFB(pSentence, (PreparedStatement ps, ResultSet rs) -> {
pList = new ArrayList<>();
try {
rs = ps.executeQuery();
while (rs.next()) {
pList.add(rs.getString(1) + " : " + rs.getString(2) + " : " + rs.getString(3));
}
}
catch (Exception ex) {
}
});
return pList;
}
這僅僅是一個封閉執行查詢,關閉只是讓確保與數據庫的連接始終是關閉的,但是我得到的錯誤是,「pList」方法變量必須是最後才能用在閉包中的,這是我沒有用C#處理的問題,好吧,得到一個新的錯誤,最終var pList無法修改,所以,我所做的就是將pList移出該方法,並將其置於一個私有變量中,如下所示:
private ArrayList<String> pList = null;
public ArrayList<String> getData(){
String pSentence = "SELECT * FROM EMPLOYEES";
_con.queryFB(pSentence, (PreparedStatement ps, ResultSet rs) -> {
pList = new ArrayList<>();
try {
rs = ps.executeQuery();
while (rs.next()) {
pList.add(rs.getString(1) + " : " + rs.getString(2) + " : " + rs.getString(3));
}
}
catch (Exception ex) {
}
});
return pList;
}
然後它工作,但是,我想知道是否會有內存泄漏或知道是否有更好的方法來做到這一點,謝謝。
你說得對,我把方法內部的聲明和初始化,但在關閉之外,它工作,謝謝。 – user2070369