在一个方法里看到过这个评论:
//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/