为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

摇曳的蔷薇 2021-04-09 14:11:35
PrintStream的printf方法具有PrintStream的返回类型,并且每次调用它都会返回此对象(其他打印方法是无效的)。那么为什么要这样设计呢?就此而言,如果您拥有任何类型的对象,并且该对象具有返回该对象本身的方法,那又有什么意义呢?您已经有了对象(特别是此对象)。那么为什么要返回这个对象呢?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

这被称为流利的界面。它的设计使您可以将调用链接在一起,如下所示:


stream.printf("aaaa")

      .printf("bbbb")

      .printf("cccc");

而不是:


stream.printf("aaaa");

stream.printf("bbbb");

stream.printf("cccc");

通过this在方法末尾返回来实现:


class PrintStream extends FilterOutputStream implements Appendable, Closeable {

    //...


    public PrintStream printf(String var1, Object... var2) {

        return this.format(var1, var2);

    }


    public PrintStream format(String var1, Object... var2) {

        //...

        return this; // <-- here

    }

    //...

}

至于在这种情况下这是否是一种好的设计模式,我不会特别指出。进攻方面也不错。


查看完整回答
反对 回复 2021-04-21
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

print()方法,返回void在的首次发行版本中定义的传统/原始方法PrintStream

虽然PrintStream printf(String format, Object ... args) 和PrintStream printf(Locale l, String format, Object ... args) 后来在中介绍了(在Java 5中更具体)PrintStream
开发人员可能决定引入流利的方法来简化其使用,例如:

ps.print("Hello %s", oneString)
  .print("Hello %s", otherString);

由于开发人员不会通过重构现有方法(用void流利的方法代替)来破坏类的API,因此现在我们将它们混合在一起。
这些新方法很好,但是不幸的是,结果导致API不一致:大多数打印方法都返回,void并且只有两种(很可能是较不常用的一部分)是流利的。


查看完整回答
反对 回复 2021-04-21
  • 3 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信