OBE (Open Business Engine) 源碼基於 JDK 1.4 編寫,升級到 JDK 1.5(Java 5)編譯時遇到兩類阻塞性錯誤:原始類型比較與 enum 標識符衝突。
public int compare(Object lhs, Object rhs) {
return ((Long) lhs).compareTo(rhs); // 編譯錯誤:Object 無法直接調用 Long.compareTo
}
JDK 1.5 引入泛型,Long.compareTo(Long) 簽名變為 compareTo(Long),不再接受 Object。舊代碼依賴擦除前的多態行為,現需顯式轉型。
public int compare(Object lhs, Object rhs) {
return ((Long) lhs).compareTo((Long) rhs); // 雙向轉型
}
全局搜索 implements Comparator 或 compare(Object, Object) 批量修正。
enum 導致編譯失敗examples 模塊中存在名為 enum 的包或類,JDK 1.5 將 enum 升級為關鍵字,直接報錯。
examples/build.xml 的 <javac> 任務添加 source="1.4" 屬性,告訴編譯器按 1.4 語法解析,忽略 enum 關鍵字保留。<javac srcdir="..." destdir="..." source="1.4" target="1.4"/>
enum 包/類重命名為 enumeration、enumtype 等,同步修改所有引用處。source=1.5,設置 source=1.4 可平滑過渡,不影響運行時行為(類文件版本仍可為 49.0/50.0)。obe-engine 編譯通過,無 Comparator 相關錯誤。examples 模塊通過 source=1.4 編譯成功。JDK 1.5 遷移的核心阻力在於泛型擦除帶來的類型檢查收緊與新關鍵字佔用標識符。對於大型存量項目,採用「局部源碼修正 + 模塊級 source=1.4 兼容編譯」雙管齊下,可在不重構業務邏輯前提下快速實現編譯通過,為後續逐步泛型化重構爭取時間窗口。