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

2022-09-01 22:41:01

我有一个方法:

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 = ???
        }
    }
}

当它运行时,我得到的输出如下:

Field name: java.lang.String

现在,如何使用反射将实际的字符串值提取到 中strValue


答案 1

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

您可以按如下方式使用 get:

String strValue = (String) field.get (objectReference);

答案 2

在理想情况下,不保存数据。它仅保存有关其实例的结构和行为的信息,以及保存要使用的数据的实例。因此,除非您传递任何实例(它将从中实际提取值),否则您的方法无法提取值。ClassClassesextractStringFromField

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

String strValue = (String)field.get(instance);