No Programming, No Life

プログラミング関連の話題や雑記

nullでオーバーロードしてメソッドを呼び出す

Javaにはメソッドのオーバーロード機能があります。
そこでnullを欲しいクラス型にキャストして引数として渡して
クラスの型で呼び出しメソッドを判断し、そのクラスのインスタンスをgetする
ファクトリクラスなんかが作れるみたいです。

class NullOverloadTest {
public static void main(String[] args) {
Factory f = new Factory();
System.out.println(f.get((ClassA) null).getClass().getName());
System.out.println(f.get((ClassB) null).getClass().getName());
System.out.println(f.get((ClassC) null).getClass().getName());
}
}
class Factory {
ClassA get(ClassA cls) {
return new ClassA();
}

ClassB get(ClassB cls) {
return new ClassB();
}

ClassC get(ClassC cls) {
return new ClassC();
}
}
class ClassA {}
class ClassB {}
class ClassC {}

実行結果
ClassA
ClassB
ClassC
かなりトリッキーな感じですが…なかなか使えるかも?
しかし、書き方が美しくないですね。うーむ。