ネストクラスの狭間
public class ComponentFactory { public static class DefaultProvider implements ComponentProvider { } }
DefaultProviderクラスはインナークラスではなく、ネストトップレベルクラス(最新の仕様ではもうこのように呼ばないらしいけれど)。こんなの試験の問題や例題でしか見たこと無かった。
しかし、周りに聞くと、TDDでは偶に使うイディオムだということを聞いた。なぜならば、JavaはひとつのJavaファイル内に複数のクラスが定義された場合、publicスコープにできるのは一つだけだから、テストケースの中に複数のテストクラスを入れ子にしたい場合などに以下のようにして使うのだそうな。
public class Test1 extends TestCase { public static class Test11 extends TestCase { } public static class Test12 extends TestCase { } public static void main(String[] args) { TestSuite suite= new TestSuite(); suite.addTest(new TestSuite(Test1.Test11.class)); suite.addTest(new TestSuite(Test1.Test12.class)); junit.textui.TestRunner.run(suite); } }
C#の場合どうかというと、ネストしたクラスは元々がstaticなメンバクラスなんで、わざわざstaticと書く必要が無い、で良いのかな。C#のstatic classはstaticなメソッドしか書けないクラス(ユーティリティ)だし。ってなんか頭が混乱してきたぞ。