内部クラスって意外に強力ですね。
abstract class Hello { public abstract String hello(); // 日本語のハロー関数ポインタ public static Hello getJapan(){ return new Hello() { public String hello() { return "こんちわ"; } }; } // 英語のハロー関数ポインタ public static Hello getEnglish(){ return new Hello() { public String hello() { return "Hi"; } }; } // 独自のハロー関数を作る(クロージャっぽい) public static Hello getOriginal(final String msg){ return new Hello() { public String hello() {return msg;} }; } } /* 利用法 pw.println(Hello.getJapan().hello()); pw.println(Hello.getEnglish().hello()); pw.println(Hello.getOriginal("んちゃ").hello()); */
こうするとクロージャっぽいクラスを返せる、と。ただ、内部クラスからは、ローカル変数についてはfinalな変数しか参照できないようなので、あんまりに自由なことは出来ませんね。finalじゃないと、
test.java:22: local variable msg is accessed from within inner class; needs to be declared final
と怒られます。
蛇足的なおまけ。perlをやってて久々にjavaると忘れること。
- ; をつけない
- 戻り値を書かない