工作问题

工作问题小汇总

更新文件替换问题

在项目开发过程中,线上功能替换一般都是只替换个别文件,但是这样会产生一种问题。

问题描述:

项目中有个pojo类EomsWorkSheet其中有个cCMS_ProcessId属性,原来的类型为long,并且该pojo被很多class引用。
public void setCCMS_ProcessId(long cCMS_ProcessId) {
CCMS_ProcessId = cCMS_ProcessId;
}
操作:由于项目需要,需要将cCMS_ProcessId类型改为包装类型Long,更改之后的结果为
public void setCCMS_ProcessId(Long cCMS_ProcessId) {
CCMS_ProcessId = cCMS_ProcessId;
}
之后打包上传。只是更改了该文件并上传。运行之后,发现引用该方法的地方都会报错,提示setCCMS_ProcessId方法找不到。可是类中明明又该方法。

问题解决:

由于是局部进行更新,更改了eomsworksheet内容,也只是局部替换调该类,之前引用该类并使用该方法的二进制class文件并没有同步更新,因此其中的二进制内容仍然只存储的是eomsworksheet类中setCCMS_ProcessId方法为基本数据类型的方法,而此时更改为包装类型,因此会找不到。
找到问题之后,解决方法,将所有引用该方法的类,也重新编译一下一并上传上去即可。

问题扩展:

如果更新方法体内容,不更改方法签名 为什么就没问题?这是只替换方法体内容,而形参 方法名 返回类型没有更改,则方法签名不会发生变化,之前编译好的(引用相应更改类)class文件中的方法签名并没有变化,也是可以正常找到相应的class,并定位到调用的方法,因此可以执行最新的代码,同时之前的class也不需要替换。
同理: 如果该类新增方法,同样不影响之前编译的class,也可正常编译通过。

问题总结:

以后局部替换文件,不要更改原有类的方法签名(返回值、访问权限、形参、方法名),可以新增方法、新增变量、更改方法体,这样只需要替换更新的类即可。如果更改原有类的方法签名,则必须也要将引用该类相应方法的类也进行重新编译,同时一并替换掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值