如何在编译java的时候,取消编译器对编译常量的优化?
黄舟
黄舟 2017-04-17 10:59:38
[Java讨论组]

如何在编译java的时候,取消编译器对编译常量的优化?

关于编译期常量:

参见下面链接
http://stackoverflow.com/questions/90...

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
巴扎黑

我大概明白了,也许你遇到的问题是你想重新编译某个java文件(比如A.java),里面有个常量(比如final int a)和上次编译时不一样,但是另一个使用A.classa的文件(比如B.java)由于在javac在上次编译的时候将当时的A.class里面的常量直接给内联了,所以就达不到你想要的效果。

如果是这样的话,对于String你可以使用.intern()来防止编译器进行优化,对于其他类型,你可以要么不定义为常量,要么将常量定义为private,然后使用一个static方法来返回这个常量。

来源:
http://stackoverflow.com/questions/37...
http://docs.oracle.com/javase/specs/j...

编辑:楼主提到了无法修改对方(我猜指的是常量提供者)的源文件,那么也有另一种方式可以强制读取常量的内容,那就是使用反射。

import java.lang.reflect.Field
    
// Inside some method
Field field = ConstProvider.class.getField("SOME_CONSTANT");
Object value = field.get(null);

如果常量的类型是int则可以使用getInt(null),等等等等。
我测试了一下,这个方法完全可用。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号