我正在从C#到Java的闭包翻译一些代码,但我得到一个错误,代码是这样的:
public ArrayList getData(){
String pSentence = "SELECT * FROM EMPLOYEES";
ArrayList 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#,好吧,我做了最后,我得到一个新的错误,最终变种pList不能被修改,所以,我做的是将pList移出该方法,并将其放入一个私有变量,如下所示:
private ArrayList pList = null;
public ArrayList 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;
}然后它工作,但是,我想知道是否会有内存泄漏或知道是否有更好的方法来做到这一点,谢谢。