4

JDK 或通用库中是否有任何辅助方法可以执行此操作:

if (resource instanceof AutoCloseable) {
    ((AutoCloseable) resource).close();
}

close()如果适用,只需一条线即可调用对象。

我知道try-with-resources,这不适用于这种情况。而且我知道并非所有具有close()方法的类都实现AutoCloseable. 但是,我似乎一遍又一遍地写上面的内容..

4

3 回答 3

0

Apache Commons 提供了一些东西:

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Closeable)

于 2014-03-23T20:06:15.377 回答
0

closeQuietly这是适用于 AutoCloseable的 apache commons :

  static void closeQuietly(AutoCloseable closeable) {
    try {
      if (closeable != null) {
        closeable.close();
      }
    }
    catch (Exception swallowed) {
    }
  }

因为谷歌把我派到这里来处理那个案子:)

于 2017-11-20T19:35:37.210 回答
-1

编辑

检查这个:

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) { }
    }
}
于 2014-03-23T20:04:32.170 回答