- - PR -
メソッドの中にメソッド?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-11 01:29
いつもお世話になります。J2SDK 1.4.2_06です。
ThredLocalクラスを使おうとドキュメントを見ていたら、サンプルで 今まで見たことの無い記述方法が出てきて少々戸惑っております。 public class SerialNum { // The next serial number to be assigned private static int nextSerialNum = 0; private static ThreadLocal serialNum = new ThreadLocal() { protected synchronized Object initialValue() { return new Integer(nextSerialNum++); } }; public static int get() { return ((Integer) (serialNum.get())).intValue(); } } クラス変数宣言のすぐ下のThreadLocalを返すメソッド(あれ?変数?) 内にブロックでくくられてさらにメソッドが入ってます。 今まで基礎っぽいことしかやってなかったのでこのような記述を 見たことがなかったのですが、メソッドをネストしてるんでしょうか? 記述方法の呼び方さえも分かりませんので調べようが無いのです。 参考になるサイト等ご存知の方、是非紹介していただきたいです。 よろしくお願いします。 | ||||
|
投稿日時: 2005-11-11 01:59
これは匿名インナークラスと呼ばれる表記法です。
特定のクラスを拡張したいけれども他で利用する場面がないのでイチイチ新しいクラスを書き起こすのは面倒だし、メソッド一つ実装するだけに別のブロックや java ファイルに書いては可読性が下がってしまう、というような場合に利用します。 意味的には以下のコードとだいたい一緒です。 #コンパイルできるか、動作などは未検証です
[ メッセージ編集済み 編集者: インギ 編集日時 2005-11-11 02:01 ] | ||||
|
投稿日時: 2005-11-11 02:28
インギさん、ご返答ありがとうございます。
JAVAをはじめるときに最初に買った入門書でswingの 練習用アプリを作りました。その時にも出てきたやつです。 今思い出しました。WEBアプリばっかりやってるとあまりお目に かかれないのでしょうか、完全に忘れてました。 匿名内部クラスって書いてありました。日本語名ですね? 入門書ではとりあえずこんな感じで書けばいいんだよ的な 書かれ方をしてたので、それがextendsを含む意味だと言うこと は知りませんでした。勉強になりました。ありがとうございました。 | ||||
|
投稿日時: 2005-11-11 07:50
そうそう、Swing とかで Adapter を使うときにも大抵メソッド一つしかオーバーライドしないのでよく使いますね。
英語では anonymous inner class ですね。 http://www.google.com/search?client=safari&rls=ja-jp&q=anonymous+inner+class&ie=UTF-8&oe=UTF-8 |
1