ある部分で一時的にしか使わないクラスは、できるならばなるべく狭いスコープ内にとどめておきたいと思う。
こうした時、無名クラスを使うのは有効だが、Javaの無名クラスは、あるクラスを継承して作るか、
あるクラスを実装して作るかのどちらかで、継承と実装を同時に行うことは出来ないらしい。
何とか件のようなことができそうな書き方を探してみたところ、ローカルクラスというものを使えばよさそうだということが分かった。
C#ではこういう書き方は出来ないので面白い。(ちなみに、C++ではできた。)
サンプルプログラム
Java
public class LocalClassLesson { public static void main(String[] args) { class MyLocalClass{ void doSomething(){ System.out.println("This is MyLocalClass."); } } MyLocalClass mc = new MyLocalClass(); mc.doSomething(); } }
C++
#include <iostream> using namespace std; int main(int argc, char* argv[]){ class LocalClass{ public: void doSomething(){ cout << "This is LocalClass." << endl; } }; LocalClass lc; lc.doSomething(); }
@ITの記事に分かりやすい解説が載っている。
http://www.atmarkit.co.jp/fjava/rensai4/java5eclipse17/java5eclipse17_3.html
Wikipediaのこの記事も興味ぶかい。
http://ja.wikipedia.org/wiki/C_Sharp%E3%81%A8Java%E3%81%AE%E6%AF%94%E8%BC%83
ピンバック: 【Java】内部クラス(inner class)についてのメモ – ザワプロ!