[英]How to get string value from a Java field via reflection?
我有一个方法:
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
?
看起来您需要对类的实例的引用。 您可能希望调用get并传入引用,将返回值转换为字符串。
您可以按如下方式使用 get:
String strValue = (String) field.get (objectReference);
在理想情况下, Class
不保存数据。 它仅保存有关其实例的结构和行为的信息,而Classes
实例保存您要使用的数据。 所以你的extractStringFromField
方法不能提取值,除非你传递任何实例(从它实际提取值的地方)。
如果您传递给提取值的引用的参数名称是instance
,那么您可以轻松获得您想要的内容,如下所示:
String strValue = (String)field.get(instance);
只是有用的反射字段示例代码:
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
}
String strValue = field.getName().toString();
完整代码如下所示:
public static void extractStringFromField(Class<?> Login) {
Field[] allFields = Login.getDeclaredFields();
for(Field field : allFields) {
String strValue = field.getName().toString();
// if(field.getType().isAssignableFrom(String.class)) {
System.out.println("Field name: " + strValue);
}
}
刚刚有同样的问题。 这个线程有点帮助。 仅供参考,如果其他人偶然发现此线程。 我使用 StringBuilder 类进行转换,所以基本上:
StringBuilder builder = new StringBuilder();
builder.append(field.get(object))
这具有多重优势。 一个你没有显式转换(顺便说一下,这会导致原始类型 int 与 Integer 的问题),但如果你有多个字符串操作顺序,效率也会更高。 及时关键的代码部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.