私は Java Regex
Libraryを見直してきましたがPattern
、私が何年もの間当たり前だと思っていた public コンストラクターがクラスにないという事実に驚きました。
静的メソッドがコンストラクターを優先して使用されていると思われる理由の 1 つcompile
は、パターン文字列が同じであれば、静的メソッドが以前に作成された (およびキャッシュされた) オブジェクトを返す可能性があるのに対し、コンストラクターは常に新しいオブジェクトを返す可能性があるためです。
ただし、以下に示すように、そうではありません。
public class PatternCompiler {
public static void main(String[] args) {
Pattern first = Pattern.compile(".");
Pattern second = Pattern.compile(".");
if (first == second) {
System.out.println("The same object has been reused!");
} else {
System.out.println("Why not just use constructor?");
}
}
}
コンストラクターよりも静的メソッドを使用することの背後にある他の強力な根拠はありますか?
編集:ここで関連する質問が見つかりました。そこにある答えのどれも私を納得させませんでした。すべての回答を読んで、オブジェクトの作成に関して静的メソッドにはパブリックコンストラクターよりもかなりの利点があると感じていますが、その逆ではありません。本当?もしそうなら、クラスごとにそのような静的メソッドを作成し、それがより読みやすく柔軟であると安全に想定します。