Java の static inner class がテストに便利2025年02月06日 13時57分42秒

昔は Java では内部クラスを多用していた。現在でも見るが十年前などと比べると減った様に見える。

Java は接着剤の様に大量にクラスを実装する。これがインラインで実装するとテスト等で使えなくなることも多い。そこで内部クラスを使う。内部クラスのインスタンスを生成するのには、外側クラスのインスタンスを用いて生成する必要がある。内部クラスに static を付けると、インスタンス無しで直接生成出来るのだ。static 内部クラスは外部クラスのメンバー変数等にアクセスすることが出来なくなる。

C++ では tuple や pair を用いて、一時的に複数の変数をまとめたり出来る。Java ではそれが無いため、一つずつクラスを作成しがちになる。C++ では Java ほど内部クラスを使わなくてすむ理由のだろう。

A が static class の方法で、B が非 static class の簡単な比較。

class ParentA {
  static class ChildA {
  }
}

class ParentB {
  class ChildB {
  }
}

...
   var a = new Parent.ChildA();
   var p = new ParentB();
   var c = p.new ChildB();