我有一个方法:
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
,中?
发布于 2013-07-04 11:41:50
看起来你需要一个对类实例的引用。您可能希望调用get并传入引用,将返回值转换为字符串。
您可以按如下方式使用get:
String strValue = (String) field.get (objectReference);
发布于 2013-07-04 12:00:57
在理想情况下,Class
不保存数据。它只保存有关其实例的结构和行为的信息,而Classes
的实例保存您要使用的数据。因此,您的extractStringFromField
方法不能提取值,除非您传递任何实例(它将从这些实例实际提取值)。
如果您传递给提取值的引用的参数名称是instance
,那么您可以很容易地获得您想要的内容,如下所示:
String strValue = (String)field.get(instance);
发布于 2017-05-23 06:07:03
只需使用反射字段的完整示例代码:
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
}
https://stackoverflow.com/questions/17461442
复制相似问题