2008年05月10日

Javaの内部クラス

内部クラスの階層 - 凪瀬 Blog
このエンクロージング内部クラスの内側からはnewするときに指定したOuterクラスのインスタンスが参照できます。


Ω ΩΩ<な、なんだってー

ってことは、イベントリスナーを内部クラスとして定義した場合は、内部クラスのインスタンス生成する時にわざわざthis渡す必要ないってことですか。

前回のせんだみつおを例にすると、

これが、
private class NahaNahaListener implements NahaNahaEventListener {

    Player player = null;

    public NahaNahaListener(Player player) {
        this.player = player;
    }

    public void nahaNahaPerformed(NahaNahaEvent e) {
        this.player.talk("<('A`)> ナハナハ!!");
    }

}


こうなる。
private class NahaNahaListener implements NahaNahaEventListener {

    public void nahaNahaPerformed(NahaNahaEvent e) {
        Player.this.talk("<('A`)> ナハナハ!!");
    }

}


うーん、スッキリ。
publicな内部クラスのインスタンスを作るときに、親クラスのインスタンスからしか作れなくて気持ち悪かったんですが、こういう理由があったんですね。

ちなみに、C#は親クラスとのインスタンス共有はないので、関係性がサッパリしてます。
OuterClass.InnerClass innerClass = new OuterClass.InnerClass();

クラスの定義がネストしているだけで、名前空間+1といった感じです。

Javaはヌルヌル、C#はサラサラしているってイメージが何故かあったんですが、こういう部分が影響しているのかも。(あとはEclipseVisualStudioの使用感の違いか)



t_yano - twitter
コンストラクタの中でクラスを定義するなどした。意外と知られていないJavaの機能「ローカル・クラス」。メソッド内でもクラスを定義できる。まあ匿名クラスから連想すれば当たり前の話なんだけどね。


Ω ΩΩ<あqswでfrtgyふjきぉp;
posted by 膳 at 00:44| Comment(2) | TrackBack(0) | Java

2008年05月05日

Javaでせんだみつお2

前回のせんだみつおだと、ゲームの流れがおかしかったので修正。
みつお発言後にナハナハではなくて、みつお発言後の指名でナハナハでした。
きっと需要がものすごくあると思うのでソースファイルも置いておきます。
■ダウンロード



以下、晒し。
続きを読む
posted by 膳 at 12:30| Comment(2) | TrackBack(0) | Java

2008年05月04日

Javaでせんだみつお

Javaの練習用にせんだみつおゲーム書いてみました。
C#脳全開なのでJavaのお作法的におかしなところありそうで怖いです。
せっかくのGWなのにこんなもの書いている自分も怖いです。

※ゲームの流れがおかしかったので修正。(2008/05/05)




以下、晒し。
続きを読む
posted by 膳 at 11:11| Comment(1) | TrackBack(0) | Java