首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过反射从Java字段中获取字符串值?

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

Stack Overflow用户
提问于 2013-07-04 11:35:47
回答 5查看 45K关注 0票数 21

我有一个方法:

代码语言:javascript
复制
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 = ???
        }
    }
}

当这段代码运行时,我会得到如下输出:

代码语言:javascript
复制
Field name: java.lang.String

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-04 11:41:50

看起来你需要一个对类实例的引用。您可能希望调用get并传入引用,将返回值转换为字符串。

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

代码语言:javascript
复制
String strValue = (String) field.get (objectReference);
票数 36
EN

Stack Overflow用户

发布于 2013-07-04 12:00:57

在理想情况下,Class不保存数据。它只保存有关其实例的结构和行为的信息,而Classes的实例保存您要使用的数据。因此,您的extractStringFromField方法不能提取值,除非您传递任何实例(它将从这些实例实际提取值)。

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

代码语言:javascript
复制
String strValue = (String)field.get(instance);
票数 6
EN

Stack Overflow用户

发布于 2017-05-23 06:07:03

只需使用反射字段的完整示例代码:

代码语言:javascript
复制
Field[] fields = InsanceName.getDeclaredFields();
for (Field field : fields) {      //array for fields names

System.out.println("Fields: " + Modifier.toString(field.getModifiers())); // modyfiers
System.out.println("Fields: " + field.getType().getName());  //type var name
System.out.println("Fields: " + field.getName());        //real var name
field.setAccessible(true);                                //var readable
System.out.println("Fields: " + field.get(InsanceName));  //get var values  
System.out.println("Fields: " + field.toString());     //get "String" values
System.out.println("");  //some space for readable code
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17461442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档