読書会(Effective Java (Second Edition))第5回議事録

[ 戻る ]


議事録「Effective Java(第2版)」を読む会 第5回

日時: 2008-12-27(土) 10:00-17:00

出席者: 遠藤、高橋(徹)、荒川、根本、かどわき、村山、吉本、柴田、高江洲、
    高橋(智)、小棚木、松永、岩室(記)

----------------------------------------------------------------------

第6章 enumとアノテーション

項目30
・enumのコンストラクタはprivateにできるか?
 →できる。デフォルトでprivate扱い。
・enumのメンバーはインナークラスかサブクラスか?
 →通常はenumに対応するクラスのインスタンス。個別のメソッドを定義した
  ときは、サブクラスのインスタンス。このままだとenumのコンストラクタ
  にアクセスできないが、暗黙でヘルパーコンストラクタが生成されるので、
  問題はない。(javapで確認できる)
・enumにprivateなインスタンス変数を定義したとき、メンバー個別のメソッド
 からアクセスできるか?
 →privateならばアクセスできない。(メンバー個別のメソッドを定義したと
  きはサブクラスからのアクセスになるから)
・p150のサンプルコードで、何故2で割っているのか?
 →残業代の割増分を表す。
 →0.5を掛けるようにして、定数名を付けた方がいいのではないか?
 →よくない例ということで。
・「strategy」は「ストラテジ」か「戦略」か?
 →訳者の裁量の範囲ではないか?
 →でも(他の本のように)「abstract factory」が「抽象工場」になると、
  受け入れられない。
 →いや、さすがにそれはやらない。カタカナにする。(by訳者)
 →でもこの本では「抽象ファクトリ」になってますよ。
・p151のサンプルコードで、enumの入れ子になっているenumにstaticを付ける
 必要がないのは何故か?
 →classの入れ子になっているenumにstaticを付ける必要がないのと同じ。
 →詳細はJava言語仕様を確認するということで。
・enumはserializeのために特別扱いされる仕組みになっている。

項目31
・特になし。

項目32
・EnumSet.ofは、引数が1〜5個ならばメソッドオーバーロード、6個以上は可変
 長引数で定義されている。
・EnumSetをイテレートすると、どの順序で出てくるか?
 →ordinalの順のはず。
・EnumSet.of の引数の型はどうなっているのか? 何故キャスト不要?
 → public static > EnumSet of(E e)
・Cのようなenumの範囲を超える使い方(メンバー個別のメソッド定義等)を知っ
 ている(活用している)人は少ない感じがする。

項目33
・この例は本当にわかりやすいのか? 遷移表の方がわかりやすくないか?
 →でも追加し易いのは後者では。
 →ぱっと見わかりやすいのは遷移表だけど、メンテナンスしやすいのは遷移
  ルールの記述。
・enumの問題というより、状態遷移表vs状態遷移図のような感じが。
・2次元だったらいいけど、3次元、4次元だとどうなる?
・p159の下から2行目は、「EnumMap<..., EnumMap<..., ...>>」(後のEnumMap
 の中は「...」ではなく「..., ...」) (by訳者)

項目34
・enumでなくてもいいのではないか? 例が無理矢理っぽい気がする。
 → 例は、列挙することが目的じゃなくて、オペレーションが目的なので、わ
   かりにくいのではないか?
・列挙の意味としてのenumから外れている。singletonの親戚?
・enum要素やそのメソッドにJavaDocを記述すると、どう出力される?

項目35
・InvocationTargetExceptionは、invokeは正常に実行されたが、そこで呼ばれ
 たメソッドが例外を投げた場合に発生する。メソッドが投げた例外は、
 getCause()で取れる。
・p167の真ん中あたり、「英語では」だと意味が通らないので、「言葉に直す
 と」「意味するところは」の方がよいのではないか。
・「言いにくい」と書いてあるが、それほど言いにくいとは思えない?
・JUnit4等、アノテーション系テストツールのメリットは?
 - @Testならば、メソッド名を考えなくて良い。内容を説明する文をそのまま
  メソッド名にする。
 - テストのメソッド名は日本語で書いて、そのまま納品物にできる。
 - JUnit3から移行するほどのモチベーションが湧かない。(規約を変えたり、
  強制したりするだけのメリットが感じられない)
 - Junit3で書いたテストコードもJUnit4で実行できる。
・p168-169の例では、異常+異常の組み合わせを渡しているが、一般的には2つ
 に分けるのではないか?

項目36
・interfaceを拡張したinterfaceに@Overrideを付けるときは?
 →メソッドを増やしてないつもりなのに、(typoなどで)メソッドが増えてい
  るとき、@Overrideが付いてるとエラーになる。
・@Overloadは無いのか? @NotOverride?
 →オーバーロードするのと、オーバーライドしないのとは違うのでは?
 →スーパークラスで@Overloadした後、サブクラスで@Overrideしたら、おか
  しくならないか?

項目37
・ObjectOutputStrem.write(Serializable obj) になっていないのはただの失
 敗だった?
・マーカーアノテーションは、アノテーションの実装を変更しても再コンパイ
 ルなどが不要。
・インターフェースは、変更すると、インターフェースに関連する全てを再コ
 ンパイルが必要。

第7章 メソッド

項目38
・p176の例で、「offset <= a.length」は問題があるのでは?
 →以下の組み合わせは正当と考えてよいと思われるので問題はないと思われる。
   a.length = 0, offset = 0, length = 0
   a.length = 1, offset = 1, length = 0
・事前条件・事後条件の指定が欲しい。
 →BugParadeに投票すればよいのでは?

項目39
・呼出の移転はうまくいくのか? オブジェクトの所有権が問題。(特に明示的に
 リソースを破棄(closeやdispose)する場合。

                                 以上


[ 戻る ]