ポンコツPdM

プロフィール画像

独立系のSIerに務めるSE,PM。 仕事の上で得たIT関連やプロジェクト運営関連の知識を書きます。 使用技術:Java,ウェブ関連全般,データベース全般 (どれも広く浅く)

HashMap.getのnullがキー未登録か登録済みnullかをcontainsKeyで見分ける記事のアイキャッチ。

実装・エラー解決

2026/9/6

JavaのHashMapでgetがnullになる原因|containsKeyとの使い分け

AIによる要約HashMapのgetがnullを返すのは、キーが登録されていない場合と、キーに対してnull値が登録されている場合の2通りです。getだけでは区別できないため、区別が必要ならcontainsKeyを使います。getOrDefaultもnull値が登録されている場合はnullを返すため、常に既定値になるわけではありません。可能ならMapへnullを格納せず、未登録・取得失敗・値なしの意味を設計上分けます。 Mapはマスタ値、表示名、集計結果、キャッシュなど幅広く使われます。`get(key) ...

Stream.peekが終端操作なしでは実行されない理由を遅延評価から解説する記事のアイキャッチ。

実装・エラー解決

2026/9/6

JavaのStream.peekが実行されない理由|終端操作と遅延評価

AIによる要約Streamのfilter、map、peekなどは中間操作であり、呼び出した時点では要素処理を開始しません。toList、collect、forEach、countなどの終端操作が実行されて初めて、必要な要素が流れます。そのため終端操作がなければpeekは動かず、findFirstやlimitでは全件分動くとも限りません。peekは主に処理途中の観察へ使い、保存・更新・通知などの重要な副作用を置かないのが安全です。 Streamは、Listの各要素をすぐ加工して結果を保存する仕組みではありま ...

Integer型のListでremove(1)が値ではなくインデックスを削除する注意点を解説する記事のアイキャッチ。

実装・エラー解決

2026/9/6

JavaのList.remove(1)で値ではなく添字が消える理由|Integerを削除する方法

AIによる要約Listにはremove(int index)とremove(Object value)があります。List<Integer>にremove(1)と書くと、引数1はintなのでremove(int index)が選ばれ、値1ではなくインデックス1の要素が削除されます。値1を消すならremove(Integer.valueOf(1))、条件で複数件を消すならremoveIfを使います。値と添字を混同しないよう、変数名とテストデータでも意図を明示します。 注文IDや選択済みコードを` ...

JavaのCollectors.toMapで重複キーが発生した時のマージ方法を解説する記事のアイキャッチ。

実装・エラー解決

2026/9/6

JavaのCollectors.toMapでDuplicate keyになる原因|重複時の対処法

AIによる要約Collectors.toMapは、異なる要素から同じキーが作られると、標準ではIllegalStateExceptionを投げます。第3引数へマージ関数を渡せば回避できますが、機械的に先勝ち・後勝ちへするとデータ欠落を隠す危険があります。キーが本当に一意か、重複時にどちらを採用するか、複数件を残すべきかを業務仕様から決めます。1キーに複数値が正しいならgroupingByを使います。 `Collectors.toMap`は一覧をMapへ変換できる便利なCollectorです。しかし、開発用 ...

Arrays.asList、List.of、ArrayListでadd・set・nullの扱いが異なることを解説する記事のアイキャッチ。

実装・エラー解決

2026/9/6

JavaのArrays.asListにaddできない原因|List.of・ArrayListとの違い

AIによる要約Arrays.asListが返すListは配列をListとして見せる固定長のビューです。setによる要素の置換はできますが、addやremoveで要素数を変えるとUnsupportedOperationExceptionになります。List.ofは追加・削除・置換ができず、nullも許可しません。追加や削除が必要ならnew ArrayList<>(...)で可変リストを作ります。「List型だから変更できる」と判断せず、生成方法と所有者を確認することが重要です。 Javaの業務シ ...

JavaのOptionalにおけるorElseとorElseGetの実行タイミングを解説する記事のアイキャッチ。

実装・エラー解決

2026/9/6

JavaのOptionalでorElseが実行される理由|orElseGetとの違い

AIによる要約OptionalのorElseは「値がなければ引数を使う」メソッドですが、引数に書いたメソッド呼び出しはorElseへ渡す前に評価されます。そのためOptionalに値があっても、DB検索や保存処理は実行されます。固定値や生成済みの軽い値ならorElse、値がない場合だけ実行したい処理はorElseGet、未存在を異常として扱うならorElseThrowを使います。違いは戻り値ではなく、処理の実行タイミングで判断します。 `orElse`と`orElseGet`は、値がない場合の代替値を決め ...

Javaのfinallyでreturnするとtryの戻り値と例外が消える危険を解説する記事のアイキャッチ。

実装・エラー解決

2026/9/6

Javaのfinallyでreturnしてはいけない理由|tryの戻り値と例外が消える

AIによる要約Javaでは、tryでreturnしてもメソッドが即座に終了するとは限りません。finallyがある場合はfinallyを実行してから呼び出し元へ戻ります。そのfinallyにもreturnがあると、tryの戻り値は上書きされます。さらにtryで発生した例外まで外へ伝わらなくなるため、障害を正常終了に見せる危険があります。finallyはcloseやunlockなどの後処理に限定し、returnや業務判断を置かないのが基本です。 新人向けのJava解説では、finallyは「例外が起きても最 ...

Javaのログレベルの使い分けを解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがINFO、WARN、ERRORの基準を学ぶイラスト。

設計・テスト・レビュー

2026/9/6

Javaのログレベルはどう使い分ける?INFO・WARN・ERRORの現場ルール

AIによる要約ログレベルはメッセージの重要そうな雰囲気ではなく、運用時にどう扱うかで決めます。INFOは正常な業務・処理の主要イベント、WARNは処理を継続できるが確認が必要な状態、ERRORは要求やジョブが失敗し対応が必要な状態です。DEBUG・TRACEは調査用の詳細に使います。例外は最終的に扱う境界で一度だけ記録し、logger.error("...", e)のようにThrowableを渡します。パスワードや個人情報はどのレベルにも出しません。 Javaの現場ではSLF4JとLogbackなどを使い ...

JavaのスタックトレースとCaused byの読み方を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアが例外の根本原因を追うイラスト。

実装・エラー解決

2026/9/6

JavaのスタックトレースでCaused byはどこまで追う?根本原因の見つけ方

AIによる要約スタックトレースは先頭の例外だけで判断せず、Caused byでつながる原因例外を下へ追います。ただし最下段の例外名だけを答えにせず、その原因ブロック内で最初に現れる自作コードのファイル名・行番号を確認します。... 20 moreは省略された共通フレーム、Suppressedは主例外とは別に抑制された例外です。調査結果は「現象・原因例外・自作コードの行・入力条件」をセットで共有します。 Javaの障害調査でスタックトレースを開くと、Spring、Hibernate、Tomcatなどの行が大 ...

Spring BootのMockMvcで403と400になる原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがCSRFとPOSTテストを調査するイラスト。

設計・テスト・レビュー

2026/9/6

Spring BootのMockMvcでPOSTが403・400になる原因|CSRF・Form・JSONの確認順

AIによる要約MockMvcのPOSTが403なら、Controllerへ届く前にSpring Securityが拒否している可能性が高く、認証・権限・CSRFを確認します。CSRF保護が有効ならテストリクエストへ.with(csrf())を付けます。400なら、Formのparam名・型・Validation、またはJSONのContent-Type・構文・項目型を確認します。ステータスを無理に変更せず、andDo(print())とresolved exceptionで失敗した層を特定します。 Moc ...