如何确定声明字段的类别

时间:2011-11-04 21:20:10

标签: java reflection

有没有办法确定从这样的代码声明字段的类:

Class myObjClass = myObj.myField.getWhereDeclaredClass ();

修改 也许我没有正确表达自己。 考虑myObj类如下:

class MyObj {
  MySecondObj myField = new MySecondObj ();
}

myField不是类型java.lang.reflect.Field,我不想使用getField (String)的硬编码字符串升序。语法必须是:

myObj.myField.getWhereDeclaredClass ()

有办法做到这一点吗?

1 个答案:

答案 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”意味着你知道拥有该字段的对象,所以在某种意义上它仍然是硬编码的,这也意味着你的反射代码基本上没有机会实际抛出异常。

有没有特别的理由不使用反射?如果它的性能,你可以用反射做一次,然后硬编码你得到的值。