Java反射:获取内部实例化字段

时间:2017-03-24 08:41:48

标签: java reflection inner-classes

我有一个如下所示的界面:

public interface A {
    public interface B {
        public static final Cat cat = new Cat("Alice");
    }
}

有什么方法可以通过反射访问Cat对象吗?

我试过这个:

Field catField = Class.forName("A.B").getField("cat");

但它给了我一个ClassNotFoundException。

提前致谢!

3 个答案:

答案 0 :(得分:3)

您需要使用Outer$Inner语法和反射,而不是Outer.Inner

答案 1 :(得分:2)

这个的语法是:

Field catField = Class.forName("com.xx.A$B").getField("cat");
System.out.println(catField.toString());

(我无法判断您的包装声明是否缺失,如果是,则需要添加)

答案 2 :(得分:0)

您应使用InterfaceName.class

    Class cat;
    try {
        cat = A.B.class;
        Field catField = cat.getField("cat");
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    }