如何通过反射从Java字段获取字符串值?

20 java string reflection

我有一个方法:

public void extractStringFromField(Class<?> classToInspect) {
    Field[] allFields = classToInspect.getDeclaredFields();

    for(Field field : allFields) {
        if(field.getType().isAssignableFrom(String.class)) {
            System.out.println("Field name: " + field.getName());

            // How to get the actual value of the string?!?!
            // String strValue = ???
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当这个运行时我输出如下:

Field name: java.lang.String
Run Code Online (Sandbox Code Playgroud)

现在我该怎样提取实际字符串值入strValue,使用反射?

Owe*_*wen 34

看起来您需要对类的实例的引用.您可能希望调用get并传入引用,将返回值转换为String.

您可以使用如下获取:

String strValue = (String) field.get (objectReference);
Run Code Online (Sandbox Code Playgroud)

  • 你可以传递`null`. (14认同)

Saz*_*man 5

在理想情况下,Class不保存数据.它仅包含有关其实例的结构和行为的信息以及Classes保存数据的实例.因此,extractStringFromField除非您传递任何实例(从实际提取值的位置),否则您的方法无法提取值.

如果引用的参数名称,你传递给提取值是instance,那么你可以很容易地得到你想要的如下:

String strValue = (String)field.get(instance);
Run Code Online (Sandbox Code Playgroud)