[ 戻る ]

Java読書会BOF「Javaコードアンチパターン」を読む会 第6回

開催概要

日時

2026年7月25日(土) 10:00-17:00

場所

てくのかわさき 第4研修室

出席者(敬称略)

遠藤、岩室、井上、高橋(徹)(記)

本日は、p. 223 7.11 No.65:数値を比較するときに減算を使う から読み始めます。

第7章 オブジェクトの比較

7.11 No.65: 数値を比較するときに減算を使う

  • p.224 Integer型に、compare(int, int)があるのか・・・

  • p.225 Arrays型に、setAll(ラムダ式)があるのか・・・

  • p.225 下13行目「比較メソッドの不変条件が常に」とある不変条件は何か?

    • 【宿題】不変条件の検査の実装はどのようになっているか調べてみよう

  • p.226-227 HashSetで、Comparableを実装していないオブジェクトを入れる場合は、この問題は発生しないのでは?

    • TreeSetは Comaprableなオブジェクトか、Comparatorを指定して生成する必要があるので、同一バケットのオブジェクトをツリーにはできないはず

7.12 No.66: 比較メソッドでNaN値を無視する

  • 【宿題】p.228 doule の 0.0と-0.0 を == で比較するとどのような結果になるのか?

7.13 No.67: 比較メソッドでオブジェクトをキーの並びとして表現しない

  • Objectのeaualsメソッドと、Comparableで等しくなる場合のロジックを一致されるべき?

    • Objectのequals(等値?)と、大小の並び順の同率とは別な概念、ただし No.65でHashSet/Mapでhashが同一のときのバケットで、SortedTreeが使われることがあるので注意必要

7.14 No.68: コンパレータからランダムな数値を返す

第8章 コレクションとマップ

8.1 No.69: 関連のない型のオブジェクトを検索

8.2 No.70: 単一のオブジェクトとコレクションを混同する

  • p.244 サンプルコードでは、sealed interfaceに permits を記載していないが、記載不要なのか?

    • 【宿題】同一ソースファイルに記載する場合は、permits を省略できる模様、Java言語仕様を調べてみよう

8.3 No.71: null非許容コレクションでのnullの検索

8.4 No.72: マップでnull値を扱う

  • Map.merge 指定したキーに対応する値があるとき、前の値と新しい値を引数にとるラムダ式を渡して結果を値として格納することができる。Java 1.8から導入されているが、これを知らないので、getして加工してからputするという処理を書いていた。

  • mergeの第2引数(新しい値)は、non nullなのでnullを渡すとNullPointerExceptionとなる

8.5 No.73: 変更不可能なコレクションを変更しようとする

次回

次回は、p.251 8.6から読み始めます。