在方法中已经看到此注释:
//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/