2017-09-24 60 views
1

当我在PrintStream课程中查看printf方法的实现时,我开始知道它只是在同一个类中调用format方法。为什么PrintStream类具有printf和format方法,如果它们的行为方式相同?

public PrintStream printf(String arg0, Object... arg1) { 
    return this.format(arg0, arg1); 
} 

public PrintStream printf(Locale arg0, String arg1, Object... arg2) { 
    return this.format(arg0, arg1, arg2); 
} 

当我试图找出为什么需要printf方法时,你可以调用format方法,所有我得到的答案意味着他们在完全相同的方式行为

如果两者是相同的类的成员,它们两者public且二者均在Java1.5加入,那么,为什么在定义printf方法?

+0

我可以改变这个问题:为什么'format'方法被定义?对我来说,名称“格式”并不意味着打印,但“printf”的确如此,“printf”与相应的[C method](http://www.cplusplus.com/reference/cstdio/printf/)非常相似功能。 'String.format()'是有意义的,因为它格式化和返回结果。 'PrintStream.printf()'是有道理的,因为它打印格式化的字符串。鉴于这些,'PrintStream.format()'在结果上令人困惑/误导。它不直观*,至少不是我。 – Andreas

+0

@安德里亚,正好!问题是为什么有一个调用另一个时有两种方法。 – Yogesh

+0

为什么大自然要发明猫和**狗?他们都是食肉动物。当然,其中的一种是不必要的! –

回答

0

虽然落后

实际的想法为什么是printf的方法定义

可以由作者自己更好地解释。然而一个重要的事实是documented

在暴露API时,术语用户友好确实很重要。

便捷方法使用指定格式字符串和参数将格式化的字符串写入到这个输出 流。

形式out.printf(l, format, args)的行为的这种方法在完全相同的调用,该调用

out.format(l, format, args) 

我不打算说,format不方便虽然,举例说明假设我一直使用printf作为其他类的方法来格式化和打印字符串,我会发现在具有相同功能意图的另一个类中使用相同方法名称会很方便。

它可能不是命名API的一个很好的例子,但是: -

https://stackoverflow.com/questions/46386664/why-does-printstream-class-has-printf-and-format-methods-if-they-behave-in-same/46386688?noredirect=1#comment79731283_46386688

https://stackoverflow.com/questions/46386664

(以上故意格式化)双方将登陆到这个问题,只是说,我可能会发现用它的id来添加问题的标题很方便,或者在别的时候访问它的时候我可能不会(用户方便)。

+0

那么,你的意思是'format'方法不是方便的方法吗? – Ravi

+0

@Ravi不,我不是这个意思。 API的使用取决于客户端。如果假设我已经使用'printf'作为其他类的方法来格式化和打印一个字符串,我会发现在具有相同功能意图的另一个类中使用相同的方法名很方便。 – nullpointer

+1

部分同意。 – Ravi

相关问题