内部クラスって意外に強力ですね。
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ると忘れること。
- ; をつけない
- 戻り値を書かない