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

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

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

关于编译期常量:

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


我大概明白了,也许你遇到的问题是你想重新编译某个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),等等等等。
我测试了一下,这个方法完全可用。

【热门文章】
【热门文章】