在方法中已经看到此注释:

//I wonder why Sun made input and output streams implement Closeable and left Socket behind

这将阻止创建实现Closeable的包装器匿名内部类,该类将Close方法委托(delegate)给Socket实例。

最佳答案

Java 5中引入了Closeable,而JDK 1.0中引入了Socket。在Java7 Socket will be Closeable中。

编辑

您可以使用反射来关闭Java 4/5/6中的任何“可关闭”对象,只需通过测试close方法的存在即可。使用这种技术,您可以关闭一个ResultSet(具有close()方法但未实现Closeable):

public static universalClose(Object o) {
    try {
        o.getClass().getMethod("close", null).invoke(o, null);
    } catch (Exception e) {
        throw new IllegalArgumentException("missing close() method");
    }
}

关于java - 为什么InputStream和OutputStream实现Closeable而Socket不实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1152984/

10-09 03:40