最近在对一个产品出升级补丁时遇到一个问题,与静态常量有关。
[b]问题现象:[/b]
产品包中有一个product.jar,出升级补丁时,只修改了该jar包中的一个类中的一个静态常量。
改为
将新的AppConstant.class添加到product.jar中后,发现没有实现预期的功能。
然后尝试重新生成完整的product.jar,添加到产品包中,新功能生效。
[b]问题原因:[/b]
开始怀疑是编译环境jdk版本不一致导致的,于是尝试使用相同jdk编译,问题依旧。
后来怀疑是静态常量导致的问题,更新静态常量时,要同时更新引用该静态常量的类,并确保该类已经重新编译。因为静态常量被引用时,在编译期就已经确定了值,在运行期不会动态加载对应的值。
[b]参考资料:[/b]
[url]http://blog.youkuaiyun.com/ahhsxy/article/details/6097881[/url]
[b]问题现象:[/b]
产品包中有一个product.jar,出升级补丁时,只修改了该jar包中的一个类中的一个静态常量。
public class AppConstant {
public static final String APP_NAME = "MyProduct";
}
改为
public class AppConstant {
public static final String APP_NAME = "MyProduct2";
}
将新的AppConstant.class添加到product.jar中后,发现没有实现预期的功能。
然后尝试重新生成完整的product.jar,添加到产品包中,新功能生效。
[b]问题原因:[/b]
开始怀疑是编译环境jdk版本不一致导致的,于是尝试使用相同jdk编译,问题依旧。
后来怀疑是静态常量导致的问题,更新静态常量时,要同时更新引用该静态常量的类,并确保该类已经重新编译。因为静态常量被引用时,在编译期就已经确定了值,在运行期不会动态加载对应的值。
[b]参考资料:[/b]
[url]http://blog.youkuaiyun.com/ahhsxy/article/details/6097881[/url]
静态常量变更挑战
本文描述了一次仅修改产品包中静态常量后未达到预期效果的问题排查过程。揭示了静态常量在编译期间即确定值的特点,强调了更新静态常量时需同步更新所有引用该常量的类。
460

被折叠的 条评论
为什么被折叠?



