java - 使用反射,我可以确定 Java static final 字段是否将被内联吗?

标签 java reflection field

有什么方法可以使用反射来确定静态最终字段是否具有“=”值(以便该值在访问时内联)或者它的值是否由静态初始值设定项分配? 如果该字段确实有一个值,是否有任何方法可以在不使用 Field.get 方法的情况下检索该值(从而导致执行静态初始化程序)?

最佳答案

只有当它是一个编译时常量时,该字段才会被“内联”——参见 JLS 中的冗长定义。 .

所以仅仅在声明的时候赋值是不够的。 这不是编译时常量,尽管是一个有效的声明:

static final int INT_CONST = compute();

static int compute() {
    return 5;
}

仅通过反射您无法确定该字段是如何初始化的。

要访问类字段的任何值,需要首先加载该类,因此您无法阻止静态初始化程序的运行。

关于java - 使用反射,我可以确定 Java static final 字段是否将被内联吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499354/

相关文章:

c# - 如何在运行时动态创建 Action<T>?

Java:使用动态加载的类

java:在运行时在子类中强制执行无参数构造函数

c# - 可访问性不一致 : field type 'System. Collections.Generic.Dictionary<> 的可访问性低于其他字段

java - Maven错误: Could not calculate build plan

java - 不兼容的类型 : ArrayList<C<CAP#1>> cannot be converted to ArrayList<C<? >>

php - MySQL:是否可以在更新时对字段进行大小写?

mysql 检索字段名称作为记录集的一部分

java - App Engine Java - 当前使用联合登录/Openid - 我应该如何保留成功通过身份验证的 Facebook 用户?

java - UserTransactionAdapter 与 UserTransactionImpl