メソッドがすべて静的なメソッドばっかりのクラスのインターフェースを作りたい場合のメモ。

できない例:

public interface StaticMethod
{
	public static void method();
}

public class StaticClass implements StaticMethod
{
	public static void method() {...}
}

// こういうふうに呼びたいなー
StaticMethod[] method = {new StaticClass()};

ぶっちゃけインターフェース内にインナークラス作ってそのクラスをオーバーライドしてあげればできなくもない気がするけどなんか違う気がする。んで以下が無理やりな例。

無理やりな例:

public interface StaticMethod
{
	public void method();
}

public class StaticClass implements StaticMethod
{
	private static final StaticClass instance = new StaticClass();

	public StaticMethod getInstance()
	{
		return instance;
	}

	public void method() {...}
}

// いえーい
StaticMethod[] method = {StaticClass.getInstance()};

結果的に静的なメソッドになるからあえてstaticしない。でもやっぱり動的な状態を持つクラスに対しては使えないから解決になってないよねー。んでもよく考えてみると、インターフェースを使う場合って、外部からインターフェースの実装に対しての窓口を用意する的な意味合いが大きいと思う(たぶん)。だから複数のクラスから参照される静的なメソッドって、結果的に動的なクラスから切り出して、別クラスの静的なメソッドとして定義されると思う(たぶん)。逆に、ファクトリクラスを除く、クラス内に定義した静的なメソッドをクラス外から呼びまくるのはどうかと思うしなぁ。

結局のこの方法でいいのか、この考え方がそもそも合ってるのかっていうのが全然分からない。ダメダメですね(笑)。

関連性がある記事

Disqusでコメント