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

Java reflection: Get inner instantiated field

我的界面如下所示:

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

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

我试过这个:

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

但是它给了我一个 ClassNotFoundException。

提前致谢!

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

语法是:

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

(我不知道你的包声明是否丢失,如果是则需要添加)

你应该使用InterfaceName.class.

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