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

[ 戻る ]


--------------------------------------------------------------
Java読書会議事録 Effective Java 2nd edition.(第一回)


参加者:
高橋(智),高橋(徹),久保田,遠藤,村山,松永,
宮本,吉本,小棚木,門脇,高江洲,前山,石黒

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

・Javaのソースバージョンとターゲットバージョンで,
    ソースバージョン6&ターゲットバージョン5というのは可能か?
    バージョン5とバージョン6の違いは.
    6で追加したAPIを使いたい時にターゲットバージョン1.5で動かして問題はないか.
    6のコードを5のVMでロードは可能だが,実行中にエラーになる.

    ソースバージョンを6を使っている時に,ソースバージョン6にする必要はあるか?

・P3
"The language supports four kinds of types:interfaces(including annotations) classes(including enums)"
の (including annotations) と (including enums) 部分が追加.

------------------------------------
○Item1

・サンプルコードなど若干変更部分あり.

・「GoFのFactoryメソッドとちょっと違うよ」
Flyweightパターンへの言及を追加.

・P6,Enum型への言及が追加

・P7,「32のコレクション」
"The Java Collections Framework has thirty-two convenience implementations of its collection interfaces."
初版では20個だった.
java.util.concurrent関係も数えてるのかも

・P7,java.util.EnumSetへの言及追加.
EnumSetで64個以下だったら内部的に単一のlongを使ったRegularEnumSetインスタンスを返すが,
それ以上だと内部的にはlongの配列を使ったJunboEnumSetインスタンスを返す.

・P7の一番下の段落
挙げている例は,初版はJava Cryptography Extension(JCE)だったが,
第二版ではJava Database Connectivity (JDBC)に変更.
JCEはマイナーだからでは?

・P8後半〜P9のサンプルコードが大幅加筆変更
P9はほぼ全部追加

・P9.型推論は最近の言語のウリ.Haskellなど.

・P9.EclipseならHashMap>みたいなものは自動的に補間してくれる.
補間を打つタイミングにも依存.
Eclipseは
 「HashMap」なら補間してくれる.
 「HashMap<」まで行くと補間してくれない.

「Map> m = new HashMap」
みたいな感じでも補間してくれる.

・P10.代表的なstaticファクトリーメソッドの名前が,2版で幾つか追加.
初版ではvalueOf,getInstanceのみ.
2版では,これに加えて,of, newInstance, getType, newTypeが追加.

createInstance()がないけど,これはなぜ?
ofは一件奇妙だが,EnumSetではofは意味が通る.

------------------------------------
○P11,Item2
Item2全体が二版で新規に追加された項目.

・"Effective Java Reloaded"で扱っていた内容?

・finalである必要は? => 不変にしたいから.
不変でなければJavaBeansでいいのでは.
可変では,わざわざBuilderを使う意味がない.

・メンテナンス性は低くないか?
多少面倒ではある

・不変な性質を持つものはBuilderに適している.

・Hibernateのセッションインターフェース/セッションファクトリーがこんな感じで,うまくできている.
例えばDBMSのホスト名とかが,ある時もあればない時もあるし,後で変更したい時もある.
「作った結果」に関しては変更できない(不変オブジェクト)方が良い.
Configuration的なものには適切.

・P15,AdaやPythonで見られるような「named optional parameters」
「名前付きオプションパラメータ」でいいの? => 宿題

------------------------------------
○Item3

・P17,具体例を変更
1版:ビデオディスプレイ
2版:WindoManager
ディスプレイは一つとは限らない。

・P17,"Makeing a class a singleton can make it difficult to test its clients,~

「シングルトンはサブクラス化を禁止し,インターフェースも使わないから.
モックに置き換えられないのでテストが難しくなる」という意味では


・P17,"Before release 1.5"が追加.
1.5以後では別のやり方もある.

・P17."with one caveat~以下の「リフレクションを使えば変更可能云々」の部分が追加.

・P18,2版変更点.
"There is no longer any performance advantage to the public field approach..."
若干記述が変更されている.
初版では:public fieldには若干のパフォーマンス上のメリットがある.
2版では:public fieldには,パフォーマンス上のメリットはもはやない.

・P18 真ん中あたり,"declare all instance field transient "
が二版で追加.

・P18,As of release 1.5, there is a third approach to implementing singletons.
Simply make an enum type with one element.~
三つ目の実装方法とそのサンプルコードが追加.

・P18最後,結論も二版で変更.
「最良の実装方法は single-element enum typeだ」

これについては,「なんとなく気持ち悪い」という意見も.

------------------------------------
○Item4
・サンプルコードにAssertionError(); が追加.
その後の解説部分も追加.

・コンパイルエラーにできない? => 言語を変更しない限り無理
deprecatedを付ける.警告が出るだけマシ.

------------------------------------
○Item5

・ほとんど一緒だけど,AutoBoxingに関する変更あり.

・P20,サンプルコード中の文字列.
"silly" => "stringette" に変更.
"stringette"で検索すると,EffectiveJavaに関するページが見つかるらしい.

・P20最後の段落の数行ほど,クラス説明部を二版で追加.

・P20,サンプルコードのコンストラクタを省略.

・22P 計測条件と計測結果が変更されている.
初版:百万回 36000ms(ダメ版)/370ms(改良版)
第二版:一千万回 32000ms(ダメ版)/130ms(改良版)

ハードとVMが進歩した結果が見て取れる.

・P22ラスト〜23真ん中あたりまで.2版追加部
longとLongのタイプミスで予期しないオートボクシングが発生し,パフォーマンスが落ちる例を紹介.

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

以上.


[ 戻る ]