我正在将一些C#代码转换为Java,它包含using
语句。我应该如何在Java中复制此功能?我打算使用try
,catch
,finally
块,但我想我先跟你们核对。
答案 0 :(得分:8)
这是对的。无论如何,C#using block只是语法糖。与IDisposable最接近的Java是Closeable
。
有一个提议(已经部分提交),称为Automatic Resource Management,用于向Java 7添加类似的功能。它将在幕后使用try-finally,并建议创建一个新的Disposable接口(这将是Closeable的超级接口。
答案 1 :(得分:2)
Java中资源处理的标准习惯用语是:
final Resource resource = acquire();
try {
use(resource);
} finally {
resource.dispose();
}
常见错误包括尝试与异常捕获共享相同的try
语句,并继续使用null
s等混乱。
Execute Around Idiom可以提取这样的结构,尽管Java语法很详细。
executeWith(new Handler() { public void use(Resource resource) {
...
}});
答案 2 :(得分:0)
不要忘记空检查! 也就是说
using(Reader r = new FileReader("c:\test")){
//some code here
}
应翻译成类似
的内容Reader r = null;
try{
//some code here
}
finally{
if(r != null){
r.close()
}
}
并且java中的大多数close()抛出异常,所以检查 DbUtils.closeQuietly如果您希望您的代码更像c#,