ネットを彷徨っていたら面白いJavaコードを見かけました。
[Java]きもい呼び方
public class ExecuteMain {
public interface Operation<T> {
}
public static void main(String[] args) {
Integer integer = new Operation<Integer>() {
public Integer execute() {
return new Integer(111);
}
}.execute();
System.out.println(integer);
}
}
シンタックスハイライト、強調は私の加工です。
execute()メソッドは無名クラスにしか定義されていないのだけども、
newした時点ではOperation型ではなくてOperationを継承した無名のクラスの型なので、
その型で宣言されているexecute()メソッドが呼べてしまうという代物。
このOperationを継承した無名クラスをOperation型に代入してしまうと、
もはやOperation型としてしか扱えないので、リフレクションを除いてexecute()メソッドを呼ぶ術がない。
newした時点だけで呼べるのだけども、メソッド呼び出しをしちゃうと無名クラスのインスタンスを
保持することができないというのもあるし、使い道は皆無でしょうね。
投稿日時 : 2008年5月20日 13:43