Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

AbstractAction

Swing でイベントを処理する際
actionPerformed などをクラス内に実装して
if (....) 
で分岐処理するか
たとえば、クラス内に
private class A extends AbstractAction {
 actionPerformed (..) {
   operation;
 operation () {
 }
}
のように内部クラスを持つかどっちがいいですか?

イベントが沢山あるケースです。
イベントはふす数のルートから呼ばれるケースです。

やっぱり後者の AbstractAction を利用すべきですかね?

9

回答

3114

閲覧

9件の回答

評価

0

クラス内じゃなくて、パッケージプライベートなクラスにするのはどうでしょう?
そうでもしないとクラスが巨大になってしまいます。

評価

0

そうですね。
巨大さの基準ってあるんですかね?
いや、拡張性を考えるとおっしゃるとおりですね。
ありがとうございます。

評価

0

Sunが200行を基準に、って言ってたような気がします。
ま、javadoc用のコメント書いてたら200行なんてあっという間ですけどね。

個人的に、600行は許せる範疇です。
1000行まで行くとちょっと許せないですね。
その間はかなりあやふやです。

評価

0

知らなかった。いいこと聞きました。600 行を目安にして見ます。

評価

0

>クラス内じゃなくて、パッケージプライベートなクラスにするのはどうでしょう?
必要があればクラス内に定義するし、クラス内での定義が不要であれば、ソースの肥大化を避けるためクラス外にすれば良いでしょう。
その際のアクセス権はパッケージプライベートでもパブリックでも目的や拡張性、つまり設計により異なります。

>Sunが200行を基準に、って言ってたような気がします。
>600行は許せる範疇です。
>1000行まで行くとちょっと許せないですね。
>知らなかった。いいこと聞きました。600 行を目安にして見ます。

鵜呑みにする方もどうかと思いますが、この話のソースはどこですか?
そもそも、仮にSunがそのように提唱していても、Sunのソースコードで200行に収まっているようなものは、あまり目にした記憶がありません。

コード行数とコードの読みやすさに、一定の相関関係はありますが、200行だろうが600行だろうが、行数を基準にクラスを設計するのは誤りです。

評価

0

>Sunのソースコードで200行に収まっているようなものは、あまり目にした記憶がありません。
そうですね。
おっしゃってること良く分かりました。
確かに内部に定義する必要があるときもあります。
それが最適のばあいもあります。
その辺を良く考えてみます。

評価

0

http://www.tcct.zaq.ne.jp/ayato/programming/java/codeconv_jp/CodeConventions.doc2.html#3043

2000行でした・・・

>>Sunが200行を基準に、って言ってたような気がします。
>>600行は許せる範疇です。
>>1000行まで行くとちょっと許せないですね。
>>知らなかった。いいこと聞きました。600 行を目安にして見ます。

この引用には悪意を感じますね。
「個人的に、」を抜かした理由はなんです?

あと、
>コード行数とコードの読みやすさに、一定の相関関係はありますが、200行だろうが600行だろうが、行数を基準にクラスを設計するのは誤りです。
これは仰るとおりですが、目安にはなります。
設計がきちんとしていても行数を無視して書くこともできますし。
設計に偏りすぎるのも「「個人的には」」あまり良くないことだと思います。

評価

0

Sunのじゃねー、とか怒られそうだから、Sunのほうも置いときますね。
http://java.sun.com/docs/codeconv/html/CodeConventions.doc2.html#3043

評価

0

>この引用には悪意を感じますね。
>「個人的に、」を抜かした理由はなんです?
特に意図はありません。
気分を害したなら、申し訳ありません。

>http://java.sun.com/docs/codeconv/html/CodeConventions.doc2.html#3043
なるほど、こんなのもあるんですね。ありがとうございmす。Sun自身が守ってない気もしますが。

あとは「個人的には」ということなので、言及しません。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。