Java反思。访问字段的值
Java Reflection. Access the value of a field
我正在尝试使用 Java 反射来完成一个程序。这部分我有问题。我无法获取我要查找的字段的值。
Field [] fx = ArrayUtils.addAll(c.getDeclaredFields(),c.getFields());
for (int j = 0; i < fx.length; j++){
System.out.println(fx[j].toString());
if( fx[j].isAnnotationPresent(Searchable.class)){
Searchable ann = fx[j].getAnnotation(Searchable.class);
System.out.println(ann.field() + " " + fx[j].getGenericType());
if (ann.field().equals(field)){
System.out.println ("Found it!");
try {
fx[j].setAccessible(true);
System.out.println((String)fx[j].get(c));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
使用此代码我收到此消息:
java.lang.IllegalArgumentException: Can not set java.lang.String field
store.model.Book.publisher to java.lang.Class
知道我该怎么做吗?非常感谢。
错误告诉您,您试图将一个字符串对象插入到存储 Class 对象的字段中。
它可能在这里:
System.out.println((String)fx[j].get(c)); // the c is a Book.class, it should a Book instance object.
在这一行中...
System.out.println((String)fx[j].get(c));
变量 c 的类型为 Class 而不是 Book 类型。您需要将 Book.
的 实例 传递给 get()
我正在尝试使用 Java 反射来完成一个程序。这部分我有问题。我无法获取我要查找的字段的值。
Field [] fx = ArrayUtils.addAll(c.getDeclaredFields(),c.getFields());
for (int j = 0; i < fx.length; j++){
System.out.println(fx[j].toString());
if( fx[j].isAnnotationPresent(Searchable.class)){
Searchable ann = fx[j].getAnnotation(Searchable.class);
System.out.println(ann.field() + " " + fx[j].getGenericType());
if (ann.field().equals(field)){
System.out.println ("Found it!");
try {
fx[j].setAccessible(true);
System.out.println((String)fx[j].get(c));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
使用此代码我收到此消息:
java.lang.IllegalArgumentException: Can not set java.lang.String field store.model.Book.publisher to java.lang.Class
知道我该怎么做吗?非常感谢。
错误告诉您,您试图将一个字符串对象插入到存储 Class 对象的字段中。
它可能在这里:
System.out.println((String)fx[j].get(c)); // the c is a Book.class, it should a Book instance object.
在这一行中...
System.out.println((String)fx[j].get(c));
变量 c 的类型为 Class 而不是 Book 类型。您需要将 Book.
的 实例 传递给 get()