4

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

4

3 回答 3

8

这是正确的。无论如何,使用块的 AC# 只是语法糖。与 IDisposable 最接近的 Java 等效项是Closeable.

有一个名为Automatic Resource Management的提议(已经部分提交),用于向 Java 7 添加类似的功能。它将在幕后使用 try-finally,并提议创建一个新的 Disposable 接口(这将是 Closeable 的超级接口)。

于 2010-07-05T16:01:19.150 回答
2

Java中资源处理的标准习惯用法是:

final Resource resource = acquire();
try {
    use(resource);
} finally {
    resource.dispose();
}

常见的错误包括尝试try与异常捕获共享相同的语句,并继而将 s 弄得一团糟null

尽管Java 语法很冗长,但Execute Around Idiom可以提取这样的结构。

executeWith(new Handler() { public void use(Resource resource) {
    ...
}});
于 2010-07-05T20:16:34.900 回答
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()都会抛出异常,所以 如果你希望你的代码更像c# ,请检查DbUtils.closeQuietly

于 2010-07-05T17:41:48.083 回答