staticクラス

C#インスタンスの生成が不可能なユーティリティ用クラスを作る場合、staticクラスというのが使えるらしい。

static class SomeUtils
{
    public static void SomeMethod()
    {
        ...
    }
}

こんな感じでclassにstaticつけるだけで、このクラスはインスタンスの生成やこのクラスからの継承が不可能となる。更に、非staticなメンバや非staticなコンストラクタ*1を含めることも出来ない。


これをJavaでやる場合、

final class SomeUtils {
    private SomeUtils() {}
    public static void someMethod() {
        ...
    }
}

こんな感じに明示的に書く必要がある。


まぁ、便利といえば便利かも。なくても困らないけどあると便利な機能。

追記:
C#でクラス内にクラス書いたときに、

// C#
class Outer
{
    static class Inner {}
}

って書いても、Java

// Java
class Outer {
    static class Inner {}
}

とは全然違うから注意が必要かも。

*1:staticなコンストラクタはJavaでいうstatic初期化子のようなもの