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

 200355人 发布于 2022-11-06 12:14

如何在编译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),等等等等。
    我测试了一下,这个方法完全可用。

    2022-11-12 01:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有