Java 反思:如何在没有评估的情况下获得字段的值?

Java 反思:如何在没有评估的情况下获得字段的值?,java,reflection,Java,Reflection,正在玩java.lang.reflect,想知道是否有可能获得java.lang.reflect.Field的赋值 范例 public class Dummy { String envHttpPort = System.getenv("HTTP_PORT"); } 从java反射中,我希望具有值System.getenv(“HTTP_-PORT”)而不是类的实例化所显示的null,据我所知,检索字段值所需的类将是System.getenv(String)调用的值,这不是我想要的 是否可

正在玩
java.lang.reflect
,想知道是否有可能获得
java.lang.reflect.Field的赋值

范例

public class Dummy {
    String envHttpPort = System.getenv("HTTP_PORT");
}
从java反射中,我希望具有值
System.getenv(“HTTP_-PORT”)而不是类的实例化所显示的
null
,据我所知,检索字段值所需的类将是System.getenv(String)调用的值,这不是我想要的

是否可以按原样读取字段和值

想要的输出将与源代码相同


我希望你们能理解,如果没有,请告诉我,我会尝试重新表述这个问题。

不,不可能得到字段的“赋值”(因为你们为了这个问题任意定义了它),因为正如你们已经看到的,它不是一个值,而是一段代码

此代码是实例初始化的一部分,如果没有字节码操作,则无法提取此代码。即使可以提取,它也只知道如何设置特定类的特定字段的值,而不会返回任何可以使用的值。它也很可能调用类的其他代码来完成它的工作,因此即使您以某种方式设法隔离它,也不可能在实例的正常初始化之外执行它


长话短说,想都别想。

那么你是想拿回那段代码
System.getenv(“HTTP\u PORT”)
并自己评估,还是类似的?为什么?我想有一个更简单/更好的方法来解决你正在处理的任何问题……我同意马特的观点。这看起来像是我问的另一个原因,我希望我的源代码能够通过使用前缀/可以使用注释来生成我在System.getenv中使用的端点的文档,而能够查看字段x的“真实”值的另一个原因是减少重复。假设您要编写许多环境变量,并且需要将它们复制到JavaDoc,而我的设想是将其与构建或测试并行运行,并获得环境变量的报告,或者路由端点。为什么不解析源代码,而不是运行它并尝试让它谈论自己呢?您不需要每个类实例都有一个环境变量值的实例。为什么不使字段保持静态并避免整个问题?然后反射将在没有实例化的情况下工作。