代碼在MyEclipse/Eclipse中運行報錯,但cmd直接執行java ListErr卻正常。代碼核心片段:
List strList = new ArrayList();
strList.add("瘋狂Java講義");
strList.add("瘋狂Android講義");
strList.add(5); // 未泛型化導致類型不安全
strList.forEach(str -> System.out.println(((String)str).length()));
ArrayList()未指定泛型<String>,導致Integer能混入add(5)str -> ...中str推斷為Object,強轉String時Integer拋ClassCastException這極可能是IDE編譯/運行配置不一致導致:
// 1. 使用泛型確保類型安全
List<String> strList = new ArrayList<>();
// 2. 或顯式檢查類型
strList.forEach(obj -> {
if (obj instanceof String) {
System.out.println(((String) obj).length());
} else {
System.err.println("非字符串元素: " + obj.getClass());
}
});
// 3. Java 8 Stream寫法更優雅
strList.stream()
.filter(String.class::isInstance)
.map(String.class::cast)
.map(String::length)
.forEach(System.out::println);
new ArrayList<String>()而非原始類型javac/java命令行驗證Lambda報錯本質是泛型缺失導致的類型不安全,IDE異常多為環境配置問題。養成「泛型優先、命令行驗證」習慣,能避開90%的此類坑。