为什么PrintStream :: printf返回一个PrintStream?

PrintStream的printf方法具有PrintStream的返回类型,并且每次调用它都会返回此对象(其他打印方法是无效的)。那么为什么要这样设计呢?就此而言,如果您拥有任何类型的对象,并且该对象具有返回该对象本身的方法,那又有什么意义呢?您已经有了对象(特别是此对象)。那么为什么要返回这个对象呢?


摇曳的蔷薇
浏览 190回答 3
3回答

函数式编程

这被称为流利的界面。它的设计使您可以将调用链接在一起,如下所示:stream.printf("aaaa")&nbsp; &nbsp; &nbsp; .printf("bbbb")&nbsp; &nbsp; &nbsp; .printf("cccc");而不是:stream.printf("aaaa");stream.printf("bbbb");stream.printf("cccc");通过this在方法末尾返回来实现:class PrintStream extends FilterOutputStream implements Appendable, Closeable {&nbsp; &nbsp; //...&nbsp; &nbsp; public PrintStream printf(String var1, Object... var2) {&nbsp; &nbsp; &nbsp; &nbsp; return this.format(var1, var2);&nbsp; &nbsp; }&nbsp; &nbsp; public PrintStream format(String var1, Object... var2) {&nbsp; &nbsp; &nbsp; &nbsp; //...&nbsp; &nbsp; &nbsp; &nbsp; return this; // <-- here&nbsp; &nbsp; }&nbsp; &nbsp; //...}至于在这种情况下这是否是一种好的设计模式,我不会特别指出。进攻方面也不错。

拉莫斯之舞

该print()方法,返回void在的首次发行版本中定义的传统/原始方法PrintStream。虽然PrintStream printf(String format, Object ... args)&nbsp;和PrintStream printf(Locale l, String format, Object ... args)&nbsp;后来在中介绍了(在Java 5中更具体)PrintStream。开发人员可能决定引入流利的方法来简化其使用,例如:ps.print("Hello&nbsp;%s",&nbsp;oneString) &nbsp;&nbsp;.print("Hello&nbsp;%s",&nbsp;otherString);由于开发人员不会通过重构现有方法(用void流利的方法代替)来破坏类的API,因此现在我们将它们混合在一起。这些新方法很好,但是不幸的是,结果导致API不一致:大多数打印方法都返回,void并且只有两种(很可能是较不常用的一部分)是流利的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java