我大概明白了,也许你遇到的问题是你想重新编译某个java文件(比如A.java
),里面有个常量(比如final int a
)和上次编译时不一样,但是另一个使用A.class
的a
的文件(比如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)
,等等等等。
我测试了一下,这个方法完全可用。