由Autoboxing\unboxing(自动装包\拆包)引起的问题


在工具类 HttpUtil 中有一个方法,它的返回类型是 int ,现需要把返回类型改为 Integer 类型,

因为 jdk5.0 以后引入了自动装包 \ 拆包特性,所以使用这个方法的客户端代码是不用更改的,于是将 HttpUtil 重新编译后提到生产环境,没有提它的客户端 UserManageAction 类(因为它的代码没有改动),但问题就此产生了,抛了一个 NoSuchMethod 异常。通过 JAD 反编译看到代码还是原来的代码,没有问题。但通过 javap -c UserManageAction 可以看到:

   2:   invokestatic    #3; //Method HttpUtil.getInt:(Ljava/lang/String;) I

也就是说它调用的是返回 Int 类型的那个方法 ,而那个方法已经不存在了。把 UserManageAction 重新编译一下,再用 javap 查看,发现它现在调用的是修改后的返回 Integer 的方法了,运行也就没有问题了。

   2:   invokestatic    #3; //Method HttpUtil.getInt:(Ljava/lang/String;)Ljava/lang/Integer;

所以尽管 UserManageAction 代码没有改动,我们也需要重新编译。

你可能感兴趣的:(C++,c,C#)