- ベストアンサー
A a = new A(){}; の構文の意味が分からない。
下記サイトのコードを読んでいて、 ResponseListener listener = new ResponseListener() { //略 }; という書き方があったのですが、どういう意味になるのでしょうか? インスタンスの作り方は単に A a = new A(); だと思うのですが…。 http://www.snmp4j.org/doc/org/snmp4j/Snmp.html
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
無名クラスと呼ばれるものよ。 私も良くやるわ。 ちなみに A a = new A(); はできないわよ。 Aはインターフェースだからね。 上記の場合、正式に実装するなら、 ResponseListenerをimplementsした MyResponseListener(仮名)を別途作成し、 それを ResponseListener listener = new MyResponseListener(); とする必要があるわ。 でも、このMyResponseListenerは 今ここでしか使わない、他からまったく参照する必要のない 超ローカルなクラスなのよ。 このメソッドが終了すればGCにかけてもいいわけ。 そんな場合、わざわざクラスを1つ作る必要なくて その場でちょちょいとやってしまうことができるのよ。 それが無名クラスっていう実装方法よ。 http://www.javaroad.jp/java_class15.htm FileFilterやCompare、Runnableなんかで 他のクラスで再利用しないときは良くやるわ。
その他の回答 (1)
これは一般に「無名クラス」とか「匿名クラス」と呼ばれるもの。インスタンス生成時に、その後にある{}内のコードを自身に組み込んだ形でオブジェクトが生成される。例えば、 A a = new A(){void a(){……} }; こんな具合になっていたら、生成されたaインスタンスには、この{}にあるメソッドaが組み込み済みとなっている。 本来のクラスAのインスタンスとは異なるインスタンスが生成されるわけで、ということはこのaインスタンスは、クラスAのインスタンスではなくなってしまう(正確には、クラスAを継承した、何らかのクラスのインスタンスということになる)。が、そうしたクラスは定義されておらず、この場で名前のないクラスのインスタンスが作られた、としかいいようがない。で、無名クラスとか匿名クラスといわれるわけ。
お礼
そうなのですね。 お二方、ありがとうございます。