如何确定在哪个类中声明字段



是否有一种方法可以确定从这样的代码中声明字段在哪个类中:

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"意味着你知道对象有那个字段,所以在某种意义上它仍然是硬编码的,它还意味着你的反射代码基本上没有机会抛出一个异常。

不使用反射有什么特别的原因吗?如果是性能,你可以用反射做一次,然后硬编码你得到的值。

相关内容

  • 没有找到相关文章

最新更新