我有2类:Father
和Child
public class Father implements Serializable, JSONInterface {
private String a_field;
//setter and getter here
}
public class Child extends Father {
//empty class
}
通过反思,我想a_field
在Child
课堂上设置:
Class<?> clazz = Class.forName("Child");
Object cc = clazz.newInstance();
Field f1 = cc.getClass().getField("a_field");
f1.set(cc, "reflecting on life");
String str1 = (String) f1.get(cc.getClass());
System.out.println("field: " + str1);
但我有一个例外:
线程“主”中的异常java.lang.NoSuchFieldException:a_field
但是,如果我尝试:
Child child = new Child();
child.setA_field("123");
有用。
使用setter方法我有同样的问题:
method = cc.getClass().getMethod("setA_field");
method.invoke(cc, new Object[] { "aaaaaaaaaaaaaa" });
要访问私有字段,您需要设置Field::setAccessible
为true。您可以离开超类领域。此代码有效:
Class<?> clazz = Child.class;
Object cc = clazz.newInstance();
Field f1 = cc.getClass().getSuperclass().getDeclaredField("a_field");
f1.setAccessible(true);
f1.set(cc, "reflecting on life");
String str1 = (String) f1.get(cc);
System.out.println("field: " + str1);
问题内容: 基于使用Java反射更改私有静态最终字段,我尝试设置私有静态最终字段。 (我知道这非常骇人,但是这个问题与代码质量无关;与Java反射有关。) 此打印 我已经使用OpenJDK 6和7,以及Oracle 7进行了尝试。 我不知道Java反射可以提供什么保证。但是,如果失败了,我以为会有一个(实际上所有反射方法都会抛出异常)。 这是怎么回事 问题答案: Java内联字段可在编译时初始化为
问题内容: 我正在与一个非开源项目合作,我需要修改一个或多个其类。 在一个类中是以下集合: 我需要做的就是在这里使用反射和并发hashmap。我试过下面的代码,但是不起作用。 问题答案: 希望这是您要尝试做的事情: 它打印:
问题内容: 我想知道是否有一种方法可以获取java中某个类的所有私有字段及其类型。 例如,假设我有一堂课 现在,我想获得的所有私有字段(,,类)(如果不知道所有领域前期的名称),并检查它们的类型。 问题答案: 有可能获得与方法的所有字段的。然后,您必须检查每个字段的修饰符以查找私有字段: 请注意,这不会返回继承的字段。 最终,您可以使用Field.getType()方法获得字段的类型。
现在,我想获取类的所有私有字段(、、)(事先不知道所有字段的名称)并检查它们的类型。
这是我得到的错误(在setMOTD的最后第二行):
问题内容: 我有以下结构,并且需要某些字段为空,所以我使用指针,主要是处理sql空值 所以当我执行以下操作时,我可以看到json结果中的值类型可以为null 但是当我尝试使用反射完成所有操作时 我从反射部分得到的是以下错误 我究竟做错了什么? 这是一个GoPlay http://play.golang.org/p/0xt45uHoUn 问题答案: Reflection.Value.Set仅接受作为