目录

目录

一.问题描述

二.问题分析

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括号报错的临时解决方法(还有一个找不到了- -)

j​​​​​​ava.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相关推荐

  1. 已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!!

    已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 1.在执 ...

  2. java string转long报错_java.lang.Integer cannot be cast to java.lang.Long解决办法

    你好我是辰兮,本次是项目遇到的java.lang.Integer cannot be cast to java.lang.Long异常以及相对应的解决方案. 文章目录 一.实战问题 用postman测 ...

  3. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String

    今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...

  4. 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 ...

  5. 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 ...

  6. Java后台接收参数出现java.lang.Integer cannot be cast to java.lang.Double错误(已解决)

    在Java接受前端传过来的数据信息的时候,使用List<List< double>>进行接收结果出现这个错误 java.lang.Integer cannot be cast ...

  7. 已解决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异常的 ...

  8. 已解决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异常的正确 ...

  9. 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 ...

最新文章

  1. Windows 窗体多线程
  2. cstring转为long64_CString 与其他数据类型的转换(转)
  3. pip安装deb_趟坑:使用pip安装TensorFlow
  4. 期货与期权(part10)--远期与期货合约的比较
  5. linux查找所有字文件,Linux查找含有某字符串的所有文件
  6. 海量数据处理(位图和布隆过滤器)
  7. Linux用户、用户组、文件权限设置
  8. MySQL管理利器 MySQL Utilities---mysqlreplicate
  9. 小迪和小捷的太空之旅——地球篇
  10. 2018.09.19 atcoder AtCoDeer and Election Report(贪心)
  11. NB-IOT(1)---NB-IoT移远BC95调试
  12. localStorage 简单示例
  13. python 从地址获取数据失败怎么解决_python面试题大全
  14. Xcode引入了第三方的类库之后真机调试提示莫名其妙的错误
  15. Intel XDK问题
  16. Python 利用字典实现类似 java switch case 功能
  17. spring boot mail发送邮件异常解决
  18. steam邮件认证出现Access Denied You don't have permission to....
  19. 萤石云摄像头方向操控前端代码
  20. 嵌入式linux触摸屏校正命令,基于嵌入式Linux和MiniGUI的通用触摸屏校准程序

热门文章

  1. 安陆FPGA开发软件安装
  2. python海龟画图画数轴_在python中使用matplotlib绘制对数轴
  3. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化
  4. 阿里云 ECS 云计算训练营 Day4:安装图形化桌面
  5. 计算机桌面程序经常打不开了,电脑软件,详细教您电脑所有软件都打不开怎么解决...
  6. python 命名管道_命名管道实践
  7. Python二维数组赋值问题
  8. C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile
  9. 用平移法演示得出平行四边形的面积公式
  10. Round Robin 概念理解