2017-09-24 11 views
1

printfメソッドの実装をPrintStreamクラスで見ていたのですが、それは同じクラスのformatメソッドを呼び出すことです。私はあなたがformatメソッドを呼び出すことができたときにprintf方法を必要とした理由を見つけることを試みたときに 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); 
} 

は、私が得たすべてのは、彼らはまったく同じ方法に振る舞う を意味しているの答えでした。

両者が同じクラスのメンバーである場合は、それらの両方がpublicであり、それらの両方が、なぜprintfメソッドが定義されていた、Java1.5に追加されましたか?

+0

私は 'format'メソッドがなぜ定義されたのですか?私には、 "format"という名前は印刷を意味するのではなく、 "printf"という意味を持ち、対応する[C method](http://www.cplusplus.com/reference/cstdio/printf/)と非常によく似た機能性。 'String.format()'は結果をフォーマットして*返すので意味があります。 'PrintStream.printf()'はフォーマットされた文字列を出力するので意味があります。これらを考えると、 'PrintStream.format()'はその効果を混乱させる/誤解を招きます。少なくとも直感的ではありません。 – Andreas

+0

@アンドレアス、まさに!問題は、別のものを呼び出すときに2つの方法がある理由です。 – Yogesh

+0

なぜ自然が猫**と**犬を発明したのですか?彼らは両方の肉食動物です。確かにそれらの種の1つは不必要です! –

答えて

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

関連する問題