使用反射获取字段的初始化值

sp0*_*00m 2 java reflection field initialization

public class MyClass {
    private String s = "foo";
}
Run Code Online (Sandbox Code Playgroud)

是否可以"foo"使用反射而不必实例化 new MyClass

Field field = MyClass.class.getDeclaredField("s");
// -- ideally: --
// Object initializationValue = field.getInitializationValue();
// assert initializationValue.equals("foo");
Run Code Online (Sandbox Code Playgroud)

Per*_*ion 5

像您显示的初始化语句实际上由编译器移入类的构造函数中。您需要实际实例化一个类才能执行它们。当然,这都是幕后的事情。但是在回答你的问题时,不,你不能,无论如何都不能反思。

但是您可以使用静态分析工具(如 Soot 等)确定这些字段值。