类型转换问题报错
情况一
报错图片:
java.lang.Long cannot be cast to java.lang.Integer
发现问题:
可以根据报错提示很明确地看出,应该是显示long类型不能转换为integer类型。并且,显示错误是出现在MangerServiceImpl类的第60行代码处。
我对map中得到的类型进行了强制转换,想要将从数据库查询到的long类型转换为int类型。但是不允许。
解决问题:
虽然不理解为什么不能将long类型强转换为int类型。
但是我想到一种解决方式【方法1】,将从数据库接收到的long类型数据转换为String类型,再将String类型转换为int类型/double类型,最后成功解决类型转换报错。
引申思考:
为什么会不允许强转呢?网上查到的解释是:
map.get(“String类型的键”)所提供的是Object类型(如下图),Object类是非基本数据类型。基本数据类型和引用类型不能进行强转。
但是map.get(“String类型的键”)从数据库获得的值是long类型的,为什么不能强制转换为int类型,这里还是没有解释清楚。但是出于这一点可以想到另一种解决方式【方法2】:
因为数据库聚合函数查询到的值是Long类型,取出来之后接的值没有加泛型,因此被转成了Object类型,这个时候就可以先将Object类型转为Long类型,再强制转为int类型。
网上的第三种方法,先转为Number类型(long类型和int类型的父类),再用value提取。
总结:
方法1:long类型转换为String类型,再将String类型转换为int/double类型;
方法2:确定接收的是long类型,则转换为long类型再强制转换为int类型;
方法3:先转为Number类型(long类型和int类型的父类),再用value提取