如何通过reflection从Java字段获取字符串值?
我有一个方法:
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
现在如何使用reflection将实际字符串值提取到strValue
?
看起来您需要对类的实例的引用。 您可能希望调用get并传入引用,将返回值转换为String。
您可以使用如下获取:
String strValue = (String) field.get (objectReference);
在理想情况下, Class
不保存数据。 它仅保存有关其实例的结构和行为的信息,并且Classes
实例保存您的数据。 因此,除非您传递任何实例(从实际提取值的位置),否则您的extractStringFromField
方法无法提取值。
如果引用的参数名称,你传递给提取值是instance
,那么你可以很容易地得到你想要的东西:
String strValue = (String)field.get(instance);
只是用于reflection字段的示例代码:
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 }