LoginSignup
0
1

More than 3 years have passed since last update.

Java tips - StaticUtilityクラスの修飾子

Posted at

StaticUtilityクラスへの修飾子

皆さんはStaticUtilityクラスにどんな修飾子をつけていますか?
私はなんの疑問を持たずにfinalをつけていました。
最近のソースコードはfinalをつけずにabstractをつけていたので、その詳細と解説を備忘録として残します。

ちょっと昔の一般的なStaticUtilityの書き方

前のプロジェクトでは、StaticUtilityクラスを作成する際は、final修飾子をつけて
インスタンスを生成されないようにprivateコンストラクタを作成していました。
(毎回、めんどくさいなあと思いながら)

// クラスの修飾子にfinalをつけて継承防ぐ
public final class A {
  // インスタンスを生成されないようにprivateコンストラクを作成
  private A(){
  }

  public static String getHello() {
    return "Hello";
  }
}

最近の書き方

Spring Frameworkのクラスを読んでいるときに発見したのですが、最近の強い人たちは
abstract をつけてStaticUtilityを作成しているようでした。
Springソース

// abstractにしてコンストラクタを書いてない
public abstract class FreeMarkerTemplateUtils {
  public static String processTemplateIntoString(Template template, Object model) 
    throws IOException, TemplateException {
      StringWriter result = new StringWriter();
      template.process(model, result);
      return result.toString();
  }
}

理由

抽象クラスの場合、インスタンスの生成ができません。そのため、privateコンストラクタを定義しなくても
インスタンスを生成される心配がないので、コーディング量が減るのだと推察します。

結論

abstaractだと継承されちゃうのでは?と考えたのですが、継承されたところでオーバーライドできないし、
何よりもprivateコンストラクタの手間を考えると圧倒的にabstarctの方がメリットが大きいなと思いました。
(そもそもprivateeコンストラクタ書くの忘れる時があるから、その防止にもなるし!)

どんどん強い人のソースコードを真似していきましょう!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1