JDK 或通用库中是否有任何辅助方法可以执行此操作:
if (resource instanceof AutoCloseable) {
((AutoCloseable) resource).close();
}
close()
如果适用,只需一条线即可调用对象。
我知道try-with-resources,这不适用于这种情况。而且我知道并非所有具有close()
方法的类都实现AutoCloseable
. 但是,我似乎一遍又一遍地写上面的内容..
JDK 或通用库中是否有任何辅助方法可以执行此操作:
if (resource instanceof AutoCloseable) {
((AutoCloseable) resource).close();
}
close()
如果适用,只需一条线即可调用对象。
我知道try-with-resources,这不适用于这种情况。而且我知道并非所有具有close()
方法的类都实现AutoCloseable
. 但是,我似乎一遍又一遍地写上面的内容..
Apache Commons 提供了一些东西:
closeQuietly
这是适用于 AutoCloseable的 apache commons :
static void closeQuietly(AutoCloseable closeable) {
try {
if (closeable != null) {
closeable.close();
}
}
catch (Exception swallowed) {
}
}
因为谷歌把我派到这里来处理那个案子:)
编辑:
检查这个:
class CloserHelper
{
public static void close(Object object)
{
if (object instanceof AutoCloseable)
{
try
{
((AutoCloseable) object).close();
}
catch (Exception ignored) { }
}
}
}
我能想到这样的事情
class CloserHelper
{
public static void close(AutoCloseable obj) throws Exception
{
obj.close();
}
}
然后
CloserHelper.close(resource);
如果对象不是 aAutoCloseable
你不能只调用它
如果你想忽略异常
class CloserHelper
{
public static void close(AutoCloseable obj)
{
try
{
obj.close();
}
catch (Exception e) { }
}
}