有没有办法确定从这样的代码声明字段的类:
Class myObjClass = myObj.myField.getWhereDeclaredClass ();
修改 也许我没有正确表达自己。 考虑myObj类如下:
class MyObj {
MySecondObj myField = new MySecondObj ();
}
myField不是类型java.lang.reflect.Field
,我不想使用getField (String)
的硬编码字符串升序。语法必须是:
myObj.myField.getWhereDeclaredClass ()
有办法做到这一点吗?
答案 0 :(得分:4)
Field.getDeclaringClass()
可能有用。
示例:
class A{
public int f;
}
class B extends A{
public int g;
}
class C extends B{
public int h;
}
class Test{
public static void main(String[]args) throws Exception{
Class<C> c = C.class;
System.out.println(c.getField("f").getDeclaringClass());
System.out.println(c.getField("g").getDeclaringClass());
System.out.println(c.getField("h").getDeclaringClass());
}
}
打印:
class A
class B
class C
修改强>
如果没有反思,我个人不知道有什么方法可以做到。再说一遍,要写“.myField
”意味着你知道拥有该字段的对象,所以在某种意义上它仍然是硬编码的,这也意味着你的反射代码基本上没有机会实际抛出异常。
有没有特别的理由不使用反射?如果它的性能,你可以用反射做一次,然后硬编码你得到的值。