インスタンス取得はコンストラクタか、staticメソッドか

javaで、普通にインスタンスがほしいときは

String hoge = new String("hoge");

とかするんだろう*1。というか、そうするためにnewなんてのが用意されてるんだけど。他方、staticメソッドで同じような感じにできる。

String hoge = String.valueOf("hoge");

ともできる。さて、僕らユーザはどちらを使えば良いんだろうというお話を、ちょっと前に俳句に書いた。その時は「単純ならコンストラクタ使えばいーんじゃね」という結論に落ち着いた。

以上。前置きが長い。

いやしかし、staticメソッドを使う重要な利点が一つあって、メソッド名を変えるだけで、同じパラメータでも違う方法でインスタンスを生成できるってこと。世の中、setterで必須パラメータを与えたりする派と、インスタンス生成時に必須パラメータを全て与える派がいるらしく、自分は後者に近いんだけど、その場合に有効、というか必須となりうる。もしかして、リファクタリングもやりやすいかも知れない。

プログラムって期待通り動作させるのは第一歩、その先にどう記述するかという広い世界が広がってるんだなぁ、と改めて。

実際問題として、そこまでガチガチに理想通りに書くかどうかって問題もある。経験上、ガチガチにするアイデアがあるならそう書いた方が、後で楽になることが多いけどね。

*1:いや、普通は String hoge = "hoge"; ってするけど。