And*_*yuk 8 python java connection
在Java中是否有像Python这样的上下文管理器?
例如,说我想做类似以下的事情:
getItem(itemID){
Connection c = C.getConnection();
c.open();
try{
Item i = c.query(itemID);
}catch(ALLBunchOfErrors){
c.close();
}
c.close();
return c;
}
Run Code Online (Sandbox Code Playgroud)
在python中我只有:
with( C.getConnection().open() as c):
Item i = c.query(itemID);
return i;
Run Code Online (Sandbox Code Playgroud)
小智 20
Java 7引入了一个新功能来解决这个问题:"尝试使用资源"
http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
语法是将资源放在try关键字后面的括号中:
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
Run Code Online (Sandbox Code Playgroud)
在Java 7之前,您可以使用finally块.
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
Run Code Online (Sandbox Code Playgroud)
现在不行; Java仍然没有为这种模式添加语法糖.尽管如此,它不会像with(Python)或using(C#)一样干净,但你至少可以通过对块c.close()内部进行一次调用来清理它finally,而不是像你做的那样两次:
try {
// use c
} finally {
c.close()
}
Run Code Online (Sandbox Code Playgroud)
这也使它与两者with和using实际实现的方式一致,这是一个try..finally块(不是a try..catch).