java - 为什么 InputStream 和 OutputStream 实现了 Closeable 而 Socket 没有?

标签 java interface

在一个方法里看到过这个评论:

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

它将阻止创建实现 Closeable 的包装器匿名内部类,后者将其 close 方法委托(delegate)给 Socket 的实例。

最佳答案

Closeable 是在 Java5 中引入的,而 Socket 是在 JDK 1.0 中引入的。在 Java7 Socket will be Closeable .

编辑

您可以使用反射来关闭 Java 4/5/6 中的任何“可关闭”对象,只需测试是否存在关闭方法即可。使用这种技术允许您关闭,比如说,一个 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/

相关文章:

java - Apache Cassandra 使用 Spring 配置

interface - IDL 静态接口(interface)

json - 使用 JSON 实现 io.WriterTo

go - os.PathError 未实现错误

c# - 方法返回默认值

c# - C# 中的实现差异

java - 枚举被 JVM 视为迭代器

java - jackson JsonNode 到带有排序键的字符串

java - 如何使用Apache POI实现Excel的数组公式功能

Java 不从扫描仪输入返回字符串