2017-09-24 58 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

相關問題