ArrayList 完全支持存儲 java.sql.Timestamp 對象。報錯通常發生在取出時強轉或泛型聲明不匹配。
// 1. 原始類型 List(無泛型)
List list = new ArrayList();
list.add(new Timestamp(System.currentTimeMillis()));
// 取出時需強轉,易拋 ClassCastException
Timestamp ts = (Timestamp) list.get(0); // 若列表混入其他類型則崩潰
// 2. 泛型擦除導致誤以為不能添加
List<Date> dateList = new ArrayList<>();
dateList.add(new Timestamp(...)); // Timestamp 繼承 Date,完全合法
List<Timestamp> tsList = new ArrayList<>();
tsList.add(Timestamp.valueOf("2024-01-01 12:00:00"));
// 取出無需強轉,類型安全
Timestamp first = tsList.get(0);
java.time.Instant 或 LocalDateTime(Java 8+),避免 java.sql.* 與 java.util.Date 混用。Long(毫秒數)或 ISO-8601 字符串。// 運行時檢查實際類型
Object obj = list.get(0);
System.out.println(obj.getClass().getName()); // 輸出 java.sql.Timestamp
「不能添加」絕大多數是「取出時強轉失敗」或「泛型聲明錯誤」的誤診。加上泛型、統一時間類型,問題迎刃而解。