List listSonBoard = (List) mapboard.get(new Integer(mainBoard.getBoardId()));
for (int j = 0; j < listSonBoard.size(); j++) { // NullPointerException
// ...
}
mapboard.get(...) 回傳 null 時,直接呼叫 listSonBoard.size() 會拋出 NPE。雖然加了 if (listSonBoard != null) 判斷,但若 mainBoard.getBoardId() <= 3 時原本能顯示,加判斷後反而不顯示,說明 mapboard 中對應鍵值確實為 null,需檢查資料來源為何未放入該鍵值。
List listSonBoard = (List) mapboard.get(new Integer(mainBoard.getBoardId()));
if (listSonBoard != null) {
for (int j = 0; j < listSonBoard.size(); j++) {
Board sonBoard = (Board) listSonBoard.get(j);
// 後續業務邏輯...
}
} else {
// 記錄日誌或給預設空列表,避免前端報錯
listSonBoard = Collections.emptyList();
}
Map> 泛型避免強制轉型。mapboard.put(boardId, new ArrayList<>()) 初始化空列表,而非留 null。<c:forEach> 搭配 EL 表達式,自動處理 null 集合不報錯。核心原則:集合類變數永不為 null,預設初始化為空集合,可消除絕大多數 NPE。