用于关闭资源文件的泛型方法

时间:2015-07-11 09:58:38

标签: java generics

我有游标,输入流,输出流,而不是每个都使用.close(),我在它们上面调用一个关闭它们的方法。

我尝试过类似的东西:

private static void closeResource ( Object<T>  item )
    {
        try
        {
            if ( item != null )
            {
                item.close();
            }
        }
        catch ( Exception e )
        {
            throw new RuntimeException( e );
        }
    }

它不起作用。对象不是通用的。

2 个答案:

答案 0 :(得分:2)

所有流媒体类(InputStreamOutputStream和朋友)实施Closable界面(实际上定义 .close()方法所有工具),所以你可以这样做:

private static void closeResource (Closable item ) { .. }

答案 1 :(得分:2)

  1. Object不是通用类型,因此您无法使用Object<T>
  2. Object类中没有定义close方法。
  3. 面向泛化的解决方案是使用绑定到Closeable接口的类型参数定义generic method,该接口声明close方法:

    private static <T extends Closeable> void closeResource ( T  item )
    {
        try
        {
            if ( item != null )
            {
                item.close();
            }
        }
        catch ( Exception e )
        {
            throw new RuntimeException( e );
        }
    }