我应该如何在Java中复制C#的'using'语句的功能?

时间:2010-07-05 16:00:21

标签: c# java try-catch using-statement try-catch-finally

我正在将一些C#代码转换为Java,它包含using语句。我应该如何在Java中复制此功能?我打算使用trycatchfinally块,但我想我先跟你们核对。

3 个答案:

答案 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#,