如何通过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 }