【发布时间】:2017-10-07 04:13:01
【问题描述】:
如何获得扩展类的非静态字段?
我知道如何获取静态字段,但不知道如何从实例中获取字段。
我已经试过了
Field commandName = command.getField("name");
但我得到了NoSuchFieldException 异常。
这些是类:
public class A extends B{
public A(String name){
super(name);
}
}
public class B{
private String name;
protected B(String name){
this.name = name;
}
}
我需要从外部类中获取名称。
【问题讨论】:
-
Java 中的
Field类不存储对象的值。但是,您可以使用get(Object obj)方法从对象(如果对象包含此类字段)中获取值。 -
请注意,
getFields()会显示您可以通过getField(...)访问的所有字段。如文档中所述,这只是公共成员。 -
@Zabuza A
NoSuchFieldException可能很明显,因为找不到字段,但为什么找不到它可能是个问题。当某个字段不可公开访问时,可以抛出NoSuchFieldException,即使将正确的名称传递给getField(String)。 -
@Kröw 完全正确。也就是说,我认为,OP没有考虑。
-
啊,编辑说清楚了,该字段确实是私有。那么它是一个副本:Access to private inherited fields via reflection in Java.
标签: java reflection