返回

【Java】数据类型隐式判断缺陷修复

发布时间:2022-12-01 17:15:21 272
# java# java# 数据库# 数据# 缺陷

公司之前有一个与第三方团队合作开发的项目,由于过程沟通出现问题,导致整合测试时出现较多问题。其中有一个最经典的就是关于数据类型隐式判断的缺陷修复,追查代码用了2天的时间,后来发现影响范围过大所以没有进行彻底修复(时间、成本包不住)只做了适配处理,下面将说一下大致的情况。

A:主表、B:子表,其中A.id为A表的主键且字段类型是bigint,B.aid为A.id的外键但是B.aid数据类型是varchar类型。

为什么会存在这种数据类型不一致的情况呢?主要有两个原因:

  1. 跟远程团队之间沟通不畅,管理过程没有有效的沟通机制,同时审查制度没有落实到位为主要原因;
  2. 其次,项目周期过长,功能经过几轮同事接手,交接又未能交接清楚;

因为数据库中主表id字段数据类型为bigint,子表aid字段数据类型为varchar,因此Java实体中主表实体id的数据类型为Long,而子表实体中aid对应的数据类型为String。好巧不巧,在Java中Long类型是可以通过“equals”和“==”来进行判断,同事们在编写复杂业务逻辑时关于两字段判断的时候一看到String字段触发的判断想都不用想就直接用“equals”来判断,就会出现:

if(aId.equals(id)){
......
}

//对应的数据类型判断就是
if(String.equals(Long)){
......
}

以上写法在IDE中是不会错误提示的,而实际上在编译器层面上也是可以编译通过的。

但实际上数据在流转到这个判断时就会全部判“false”,因为“equals”方法是不会做隐式转换的,所以两个数据类型都不同的情况下是无法进行判断的。所以本次这种情况,最低成本的修改方式是:

if(String.valueOf(Long).equals(String))

先用String.valueOf转换成String再做比较。反之若要判断大小,则将String转换为Long之后再做比较。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线