今日遇到遇见无语的事情,mybatis查询数据库结果 List<Map<String, String>> 需要转换为字符串,但是在debug时,在idea小窗口单独执行代码,是可以正常编译的,离开idea小窗口执行就报错: 类型转换错误 。
报错代码如下:
目标:把 entry.getValue() 获取的值转为字符串
str = entry.getValue().toString() ;
反编译class文件,如下展示:
str =((String)entry.getValue()).toString();
编译后代码,是先把 entry.getValue() 强制转为 String 后调用的 toString() ,因为我的 entry.getValue() 返回的是日期,所以这里铁定报错!!!可见,Java中代码预处理的结果并不是按照我们习惯上设想的那样。
解决方案:
String.value0f(entry.getValue());
/**
* Returns the string representation of the {@code Object} argument.
*
* @param obj an {@code Object}.
* @return if the argument is {@code null}, then a string equal to
* {@code "null"}; otherwise, the value of
* {@code obj.toString()} is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
后来浅浅试 + “” 的方式将 entry.getValue() 转为字符串,class文件中依然是先把数据强制转为String,仍然报错!!!
entry.getValue() + ""
所以啊,避免以后麻烦,建议大家都直接用 String.valueOf() ,别玩那些花里胡哨的,浪费时间。