ほぼ同じタスクに対して異なる名前のメソッドを持つことは理にかなっています。たとえば、
open(String filename);
createThenOpen(String filename); // First create the file with default contents, then process the file.
この命名方法は、コンストラクターでは機能しません。コンストラクターが上記のようなファイル名を取ると想像してください。2 つのケースを処理するためのさまざまなオプションがあります。
- コンストラクターの If ステートメント: ファイルが存在しない場合は作成します。コンストラクターの動作は暗黙的であり、呼び出し元が既存のファイルを開く代わりに不要なファイルを作成する可能性があるため、これは適切ではありません。
- コンストラクターにフラグを追加します:
MyClass(String filename, boolean createNew)
.MyClass("hello.txt", true)
like の呼び出しは不可解なので、あまり良くありません。 - 1 つの引数が常にファイルの存在を想定するようにオーバーロードし、追加のダミー パラメーターの存在はファイルを作成する必要があることを意味します。これも醜い。
RandomAccessFile(File file, String mode)
wheremode
is"r"
などの文字列フラグを追加"rw"
します。これは私の目的には非常に不格好です。- のに
enum
似たフラグを追加します。かなりダサい感じも。Files
copy(Path source, Path target, CopyOption... options)
- 引数を取らないコンストラクターを用意し、オブジェクトが作成された直後に上記のような別のメソッドが呼び出されるようにします。指定されたファイルのデータを使用してインスタンス化せずにオブジェクトのインスタンスを作成するのは意味がないので、良くありません。
現在、私は実際には上記の番号 (6) を支持しているようで、パラメーターのないコンストラクターの直後に異なる名前の 2 つのメソッドを呼び出すだけです。オプションを見落としていませんか、またはこれらのシナリオに対する「所定の」アプローチはありますか?
編集:以下の他の人が指摘したように、もちろん7番目の、おそらく最も明白なオプションがあります:
- ファクトリメソッドを使用してください!