是否有一种方法可以确定从这样的代码中声明字段在哪个类中:
Class myObjClass = myObj.myField.getWhereDeclaredClass ();
也许我没有恰当地表达自己。考虑如下myObj类:
class MyObj {
MySecondObj myField = new MySecondObj ();
}
myField不是java.lang.reflect.Field
类型,并且我不想使用getField (String)
硬编码字符串字面值。语法必须是:
myObj.myField.getWhereDeclaredClass ()
有办法做到这一点吗?
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
"意味着你知道对象有那个字段,所以在某种意义上它仍然是硬编码的,它还意味着你的反射代码基本上没有机会抛出一个异常。
不使用反射有什么特别的原因吗?如果是性能,你可以用反射做一次,然后硬编码你得到的值。