【异常】java.lang.Integer cannot be cast to java.lang.String
目录
目录
一.问题描述
二.问题分析
1/ 2 关于BootStrapLoader的问题
2 / 3 java.lang.Integer cannot be cast to java.lang.String (属于ClassCastException)
解决方法
3 / 3 出现问题的理由
补充
Object转String的4种方法
Object转Long或者int
一.问题描述
java.lang.ClassCastException:
//Long不能被强转为String
class java.lang.Long cannot be cast to class java.lang.String
// 这个不知道是啥
(java.lang.Long and java.lang.String are in module java.base of loader 'bootstrap')
业务上用mybatis数据库操作 , 返回值用Map<String,Object>接收 , 在map.get("key")时报错了
condition.setLogUsernum(Integer.parseInt((String)(strategyMap.get("log_usernum"))));
二.问题分析
1/ 2 关于BootStrapLoader的问题
文尾有阐述 , 这里有两种迅速解决的方法
① 当前如果用的是mysql的话 ,
把pom内mysql依赖的版本修改一下 ,
因为有可能是mysql驱动的问题 ,
将版本修改为8.0.22 (原来的驱动版本是8.0.26)
②修改JDK版本 :
打开ProjectStructure → Platform Settings→SDKs → 1.8改为8
打开ProjectStructure→ Project → ProjectSDK → 1.8改为8
------------------------------------------------------------------------------------
2 / 3 java.lang.Integer cannot be cast to java.lang.String (属于ClassCastException)
我直接用(String)map.get("log_usernum")就报这个错了 一步步看
①对于刚才的代码 , 其实改Map<String,String>接收不可行 , 因为实际上还是会使用String<String,Object>来接收
②所以在用mybatis拿数据的时候 , 由于我设定的这个字段是int类型 , 对应返回的类型是Integer
问题在哪 :
虽然我在造Map接收的时候用的是<String,Object> , 于是直接map.get.var的时候返回的是Object logUsernum
但是报错的时候显示的是强转异常的 : Long→×→String
我的理解是虽然var后返回的是Object , 但是报错的时候显示的是"Long不能强转为String"
这就很矛盾了,矛盾的地方在于:
→map返回的不是Map<String,Object>这样吗,然后map中这个key对应的value它是什么类型我先不管,他长的就是一副数字的样子(比如String abc = "123",我说的数字的样子指的就是这个123),
→于是在map.get("key")以后它摸不着返回什么类型显示的是Object value了
→这个时候我直接转成String不就用了(String)value强转吗
→结果,在运行的时候,尽管在map.get("key").var的时候返回的是Object value
→但它底下还是当成了Long来处理,因为长得一副数字的样子
→所以运行的时候就报错了 , 显示Long不能被强转成String
(Object转Long的话应当先将这个Object真正转换定为Long , 再从Long转为String,那既然最终路线是Object→String,直接toString就好了何必多此一举呢)
→所以我认为报错的理由就在于运行的时候被迷惑了 , 长着一副数字样子被默认为Long类型, 结果我要变成String就直接(String)value
→补充:
还有一种情况,比如说刚才报错的代码的情况变成这样 :
condition . set ( map.get("log_usernum") )结果报错
这是因为这个value长成一副数字的样子被当成Long了(但是返回的是Obejct value),
跟刚才上面阐述的是同一个意思.
引用CSDN里javaXingzhe的话:
看了很多帖子,发现有种见解,就算mysql里面是没有泛型的,
包装类通过mybatis传入数据库的时候 ,因为没有找到相应的类型会被解析成Object,
关键是Object强转成相应类型的时候,问题就出来了,
那么类比而言,现在的问题就是:
我在数据库里对logUsernum的类型设置的是int , 不是bigint(long),
这就导致set的时候类型匹配不上 , 这个长着一副数字样子的Object value在运行时底层默认为包装类Long , 在通过mybatis传入数据库的时候 ,因为没有找到相应的类型,会被解析成Object于是强转报错了
备注:请注意区分long和Long
虽然我到底还是没扒明白根源问题出在哪里了。。但是为了代码继续跑
我和他的
解决方法
一样 , 进行类型转换 , 先转String后转我要的类型
// 不能直接这样写
int usernum = map.get("log_usernum")
// 修正步骤
String usernumStr = String.valueOf(map.get("log_usernum"));
int usernum = Integer.parseInt(usernumStr)
建议 : 强制类型转换比如(String)value这种方式 , 如果上游系统不是自己团队的尽量不要使用,很容易因为数据类型不一致转换报错。(引用勾勾的话)
3 / 3 出现问题的理由 / 什么情况会出现这种问题
先看这个例子
不想看例子你就往下拖有小结
// 先定3个变量 : Integer一个,String内容为字母的一个,String内容为数字的一个
Integer integerNumAAA = 123;
String alphaBBB = "abc";
String stringNumCCC = "321";
-------------------------------
Map map = new HashMap<>();
map.put("AAA",integerNumAAA );
map.put("BBB",alphaBBB );
map.put("CCC",stringNumCCC );
-------------------------------
// 塞好后接下来进行取值
Integer getAAA = (Integer)map.get("AAA");
// 可以看到塞进去的时候是Integer类型的话,拿出来的时候用强转可以顺利拿到值;Integer getCCC = (Integer)map.get("CCC");
// 这个会报错
// 意思就是,如果你map.put的时候是String类型的,但是内容还是数字的话就会报错
// 备注:这里报的String→Integer强转的报错,和本文的都是ClsasCastException强转问题// 解决
// 也是先转为String类型后再用Integer.parseInt转即可,如下:
Integer.parseInt(map.get("stringNumCCC ").toString());
小结 : 不管定义的map是Map map 还是new个HashMap<标明kv类型>等
①当你map.put塞的是Integer类型时 , 强转是不会报错的
②如果你塞的是String类型,但是内容却是数字,比如"123"这样的 ,就需要
先把map.get("key")先转为String类型,再使用Integer.parseInt(转好成String类型后放这)就好了
=====================================================================
补充
在map.get("key")所取的value值为String的时候
也是不能直接(String)或者直接加""这样的,还是会报错,如下:
// 报错1
String logUsername = (String)map.get("log_username");
// 报错2
String logUsername = map.get("log_username") + "";
↑当前结果无法强制转换成String
因为将自己写的和反编译后的.class文件进行对比发现变这样了
// .class的是这样的
String logUsername = (String)map.get("log_username") + ""
所以咋办 : 用String.valueOf(map.get("log_username"))
没有深究 , 水平还比较渣停留在解决问题+扒报错和源码看一点点,努力ingQAQ
========================================================================
那这样的话 , 这么多Object转String的方法 , 使用上有啥区别 , 所以我又去扒了一下看看
Object转String的4种方法
【后端】Object转String的4种方法_HolaOrange的博客-CSDN博客
Object转Long或者int
鉴于上文这么多教训。。。以后就这么干 :
先将 Object 类型转换为 string,再将 string 转换为 long/int
至于用toString()还是String.valueOf(object)根据上文阐述按自己需求选。。
关于BootStrapLoader的问题
https://www.csdn.net/tags/NtTaAg4sNzE3My1ibG9n.html
BootStrapLoader括号报错的临时解决方法(还有一个找不到了- -)
java.time.LocalDateTime and java.lang.String are in module java.base of loader ‘bootstrap’-大T笔记
出现java.lang.Integer cannot be cast to java.lang.String的问题解决_休霸哥的博客-CSDN博客
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer map里string转integer错误 - 阿米诚 - 博客园
object转string java_java实现Object转String的4种方法小结_富川福利的博客-CSDN博客
【异常】java.lang.Integer cannot be cast to java.lang.String相关推荐
- 已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!!
已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 1.在执 ...
- java string转long报错_java.lang.Integer cannot be cast to java.lang.Long解决办法
你好我是辰兮,本次是项目遇到的java.lang.Integer cannot be cast to java.lang.Long异常以及相对应的解决方案. 文章目录 一.实战问题 用postman测 ...
- “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigD
解决:将int类型转成BigDecimal类型就可以了 filtrationList.add(new Filtration(MatchType.EQ,BigDecimal.valueOf(0),&qu ...
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at java.lang.It
错误信息: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at java.lan ...
- Java后台接收参数出现java.lang.Integer cannot be cast to java.lang.Double错误(已解决)
在Java接受前端传过来的数据信息的时候,使用List<List< double>>进行接收结果出现这个错误 java.lang.Integer cannot be cast ...
- 已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String异常的
已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String异常的 ...
- 已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long异常的正确
已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long异常的正确 ...
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer 1.改sql select ...
最新文章
- Windows 窗体多线程
- cstring转为long64_CString 与其他数据类型的转换(转)
- pip安装deb_趟坑:使用pip安装TensorFlow
- 期货与期权(part10)--远期与期货合约的比较
- linux查找所有字文件,Linux查找含有某字符串的所有文件
- 海量数据处理(位图和布隆过滤器)
- Linux用户、用户组、文件权限设置
- MySQL管理利器 MySQL Utilities---mysqlreplicate
- 小迪和小捷的太空之旅——地球篇
- 2018.09.19 atcoder AtCoDeer and Election Report(贪心)
- NB-IOT(1)---NB-IoT移远BC95调试
- localStorage 简单示例
- python 从地址获取数据失败怎么解决_python面试题大全
- Xcode引入了第三方的类库之后真机调试提示莫名其妙的错误
- Intel XDK问题
- Python 利用字典实现类似 java switch case 功能
- spring boot mail发送邮件异常解决
- steam邮件认证出现Access Denied You don't have permission to....
- 萤石云摄像头方向操控前端代码
- 嵌入式linux触摸屏校正命令,基于嵌入式Linux和MiniGUI的通用触摸屏校准程序
热门文章
- 安陆FPGA开发软件安装
- python海龟画图画数轴_在python中使用matplotlib绘制对数轴
- Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化
- 阿里云 ECS 云计算训练营 Day4:安装图形化桌面
- 计算机桌面程序经常打不开了,电脑软件,详细教您电脑所有软件都打不开怎么解决...
- python 命名管道_命名管道实践
- Python二维数组赋值问题
- C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile
- 用平移法演示得出平行四边形的面积公式
- Round Robin 概念理解