为什么public void printStackTrace(PrintStream s)
在Throwable类中使用PrintWriter而不是Writer?为什么Throwable.printStackTrace需要PrintWriter而不是Writer?
我认为作家应该是规范(代码接口,而不是具体的实现),但它可能是我失踪的东西,因此这个问题。
为什么public void printStackTrace(PrintStream s)
在Throwable类中使用PrintWriter而不是Writer?为什么Throwable.printStackTrace需要PrintWriter而不是Writer?
我认为作家应该是规范(代码接口,而不是具体的实现),但它可能是我失踪的东西,因此这个问题。
Writer
是PrintWriter
扩展的抽象类。 Throwable.printStackTrace
需要PrintWriter
,因为它调用了println
方法,该方法在Writer
类中不可用。调用println
是因为它需要打印堆栈跟踪,每行一个堆栈帧。
谢谢@Abhinav:这是有道理的。这就是说,而不是有一个包装类,它将所有糖的功能(如println)直接写入Writer将是非常好的。这可以最小化层次结构,简化使用情况,并保存一个额外的对象:-)。 – daniel
可能有几个原因
他们可以做的是接受一个Appendable,它是Writer的父母。
public void printStackTrace(Appendable appendable) {
PrintWriter pw = (appendable instanceof PrintWriter) ? (PrintWriter) appendable :
(appendable instanceof Writer) ? new PrintWriter((Writer) appendable) :
new printWriter(new AppendableWriter(appendable));
Writer不是接口,它是一个抽象类:http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html – joergl
Appendable是由Writer实现的接口。 –
@joergl:你说得对。我的意思是设计意义上的“界面”,它也涵盖(某些)抽象类。 – daniel