为什么这个类(StringWriter
,PrintWriter
)方法close
没有像javadoc中提到的那样有效?
据我所知,简单没有实现。但为什么呢?
答案 0 :(得分:6)
StringWriter
不同, PrintWriter
在文件系统上没有任何资源。只有close
方法才能满足Closable
接口。
答案 1 :(得分:2)
close()
上的StringWriter
方法无法执行任何操作,因为 无需执行任何操作。
现在我们可以将其与需要在“接近”时间做某事的其他类型的Writer
(等等)进行对比。例如:
BufferedWriter
需要刷新任何缓冲的输出......这样它就不会丢失。
FileWriter
需要对打开的打开文件的本机文件句柄执行关闭。这需要完成,因为如果这些句柄没有关闭,JVM将用完,“打开”将停止工作。
但是StringWriter
不需要做任何事情......所以事实并非如此。
存在StringWriter::close()
方法,因为它实际上是在其超类中实现的。
该方法存在于超类中, make 它(更多)可用于多态上下文。如果close()
中未实现Writer
,那么Writer
(可关闭且不可关闭)将有两种“类型”,并且使用编写者的应用程序代码需要以不同方式处理它们。
实际上,应用程序可以关闭所有 Writer
个对象,知道正确的事情将会完成。在某些情况下,JIT编译器可以优化对StringWriter::close()
的调用。在其他方面,从性能角度来看,调用无操作方法的开销很少很重要。