[英]Taking the nusances out of AutoCloseable
预先:我是一个现在正在使用Java的C#人员。 其中的一些挫败感是由于我缺乏Java知识而引起的。
首先,有没有一种方法可以使“安全”的AutoCloseable
实现不需要检查Exception
? 如果我要嵌入自己的类,而该类不会从其close
方法抛出,我不明白为什么必须检查它。
第二,有什么方法可以简化try
语句中的表达式,而我不在乎返回的内容是什么? 例如在C#中,我可以这样做:
using (new Disposable())
{
// yay!
}
Java似乎迫使我将其分配给一个临时变量:
try (AutoCloseable iDontCare = getAutoCloseable()) {
// dont you dare use iDontCare
}
我希望我可以将Java简化为
try (getAutoCloseable()) {
// yay!
}
您的第一个问题:
是。 如果您的实现不引发检查异常,则可以在不引发异常的情况下实现AutoCloseable.close。
您的第二个问题:
否。try with resources语句需要该变量。 您可以将其重命名为忽略或未使用的名称,以使其变得清晰。
final class Test implements AutoCloseable {
@Override
public void close() {
System.out.println("Closing");
}
public static void main(String[] args) {
try (Test ignored = new Test()) {
System.out.println("Not using ignored");
}
}
}
Makoto的回答很好地解决了问题的第一部分,因此我将尝试解决第二部分。
我认为您想要尝试一下(没有资源)。 例如:
try {
//yay!
} finally {
// always executed
}
无论是否引发异常,都将执行finally
块。
编辑:如果不需要执行任何内容,则可以声明一个新块
{
//yay!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.