- - PR -
見たことのない書き方
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-01-07 14:30
お世話になります。
下記ロジックの8行目が理解できません。 見た感じだと、SampleクラスのなかでDataクラスを新たに?作成しているのかなぁと 思うのですが。今までこんな書き方を見たことがないもので…。 どなたかご教授お願い致します。 class Data{ String[] strs = {"Hello","Bye"}; void show(){System.out.println(strs[0] + ":" + strs[1]); } } class Sample{ public static void main(String args[]){ Data d = new Data(){void show(){System.out.println("XXX");}}; d.show(); } } 結果:XXX |
|
投稿日時: 2005-01-07 14:35
Swingプログラミングなんかをしてると Adapter を利用する場合にこんな書き方しますね。
この場所だけで匿名で継承して挙動を変えているわけですね。 継承して挙動を変えたいけれども、特に他で再利用するわけではない、って場合に使います。 |
|
投稿日時: 2005-01-07 14:49
こういうことでしょうか…
class Data{ String[] strs = {"Hello","Bye"}; void show(){System.out.println(strs[0] + ":" + strs[1]); } } class DataXXX extends Data{ void show(){System.out.println("XXX");} } class Sample{ public static void main(String args[]){ DataXXX d = new DataXXX(); d.show(); } } ※DataXXXのshowは、Sampleのmainでしか使われない |
|
投稿日時: 2005-01-07 15:05
どもでし。がると申します。
ちっと面白げなネタだったのでしゃしゃり出てまいりました(笑 さって。 通常、オブジェクトを作る際に使われる クラス名 変数 = new クラス名; という宣言ですが。 これをもうちょっと厳密に書くと、 クラス型をあらわすクラス名 オブジェクトを格納する変数 = new 事前にどーゆー内容か宣言されているであろうクラスのクラス名 となります。 で、該当のコードの場合 「事前に宣言しないで使うときにその場で宣言している」やり方、 になります。 …昔、Cのstructでこーゆーソースをたまに見てたような気がしますが。 んで、インギさんのおっしゃる通り「継承して挙動を変えたいけれども、 特に他で再利用するわけではない」ケースで使うのですが。 個人的には"悪い意味で"職人芸っぽいソースかなぁ、とか感じてみたり。 まぁ、世間を渡ってるといろんなソースがあるってことで :-P |
|
投稿日時: 2005-01-07 15:52
こういう書き方って「無名インナークラス」っていいます...よね?
ちなみに、がるがんさんと同じく思ってます>個人的に...悪い意味で... |
|
投稿日時: 2005-01-07 17:49
私も、基本的には可読性が低い等の理由で使いませんが、例外的に
JUnitテストケースで、テスト対象(及びその依存クラス)の挙動を変えたいときには頻繁に使います。。。 あとはインギさんもおっしゃっているSwing等のイベントハンドラですかね。 |
|
投稿日時: 2005-01-07 21:04
私も、最初は嫌いで避けてました。
でも、ここ4〜5年は普通に使ってます。結構イイかも。 Cyclomaticな複雑性がすぐに範囲外になってしまいますが…。 |
|
投稿日時: 2005-01-07 21:56
基本的な振る舞いは同じだけど、細かい部分で違うクラスをいろいろ作りたい場合に
Template Methodパターンと組み合わせてよく使います。 |