読書ノート - Java SE 8 実践プログラミング
Java SE 8 実践プログラミング読書会の読書ノートです。
ページ数、内容等は特に記載ない場合和訳本ベースです。
正誤表
討議事項が正誤表に記載されていることがあります。確認してください。
- 原書正誤表: http://www.horstmann.com/java8/bugs.html
- 訳書正誤表: http://www001.upp.so-net.ne.jp/yshibata/myhomepage/errata/js8rierrata.html
(本勉強会も正誤表に貢献しています)
ノート
m: mikan, M: MrBearing, Y: YuichiroSato, n: namichan0801, L:LagunaPresa, i: intptr-t, s: s-hosoai
第1章
- [p7] (Y) ラムダ計算のドットと Java のドットが混ざってるのでこの例はややこしい。
λ first . λ second .
までがラムダ式 (<expr> ::= (λ<identifier>. <expr>)
) 、その後はただの Java の式。 (参考: Wikipedia) - [p15] (m) Thread.yield() は実装によっては全く何もしないので注意 (JPL より)。
- [p16] (m) これって ConcurrentModificationException は出ないんだっけ?→出ません
- [p20] (m) 多重継承になるので、両方の意味や契約に矛盾がないか、リスコフの置換原則に従えるかにも気を付けないといけないね。
第2章
- [p31] Stream.close は close が必要ないときは呼ばなくてもよい。JavaDoc にはこうかいてある「ほとんどすべてのストリーム・インスタンスは、実際には使用後にクローズする必要はありません。一般に、クローズが必要になるのは、入出力チャネルをソースに持つストリーム(Files.lines(Path, Charset)から返されるものなど)だけです。」 (参考: JavaDoc)。
第7章
- [Ex.7-1] これはシンタックスエラーですね: https://twitter.com/Sh1bumi/status/562008866322677761
第8章
- [Ex.8-3] (m)
→ 訳者に報告済。正誤表参照。floorMode
はfloorMod
の誤植と思われる。
第9章
- [p212]
- (m)
java.io.Closable
が昔からあったやつでjava.lang.AutoCloseable
が Java 7 で追加されたやつ。 - [p216]
- (M)
Paths
の読み方は pǽðz 。 (参考: Weblio) - [p221]
- (m)
Files.copy(...)
は signature が 3 つあるけど、1 つだけPath
を返す不思議 (参考: JavaDoc)。 (L) メソッドチェーンが出来て便利だけど、確かに腑に落ちない。 - [p222]
- (M)
FileVisitor
に型変数 T 付いてるのどういうこと?なんでもいいの? (m) 上限境界すらついてないね。 - (M)
FileVisitor
の実装SimpleFileVisitor
の中身がショボすぎる件 (参考: OpenJDK Source)。Adapter パターン的に使う? (L) 確かに、コンストラクタも protected だね。そのまま new できない。 - (Y) なんか使ってる例みつけたよ (参考: 倭マン’s BLOG)。
- [p226]
- (m) 再目的化攻撃 (repurposing attack) がわからん。 (Y) 解説してるブログ発見 (参考: AUT DISCE, AUT DISCEDE)。
- [p228]
- (m)
→ 訳者に報告済。正誤表参照。BitInteger
はBigInteger
の誤植と思われる。 - [Ex.9-3]
- (L) 複数の例外をキャッチするときの実際の型はどうなるのか?
- (m) javap で調べたら
FileNotFoundException | UnknownHostException
の型はIOException
になったので、共通のスーパークラスがあてがわれると推測 (検証コード: MultiCatchAndThrow.java)。 - (L) ならば、なぜ throws には
IOException
ではなくFileNotFoundException
とUnknownHostException
を別々に書けるのか? - (m) クラスファイル上は
IOException
だとしても、そうしたときのコンパイラはFileNotFoundException
とUnknownHostException
を扱っていることを知ってるから問題ない。 - [Ex.9-8]
- (L) この問題は
Integer.compareTo
だけ禁止しているが、Integer.compare
も禁止しないといけないのでは・・・ - [Ex.9-10]
- (L) label を順序付けに含めるか否かは議論になる。そもそも (Point ではなく) LabeledPoint に対して Comparable を実装させるのは意味的におかしいのでは。
- (m) Integer.compare(int, int) がやっているのはたったこれだけだった
return (x < y) ? -1 : ((x == y) ? 0 : 1);
- [Ex.9-11]
- Windows の場合、findstr が利用できる。ただし使える正規表現が大幅に限られるなど grep と比べて制約が多い。
その他
雑談とかで挙がったキーワードなど