我有一个如下所示的界面:
public interface A {
public interface B {
public static final Cat cat = new Cat("Alice");
}
}
有什么方法可以通过反射访问Cat对象吗?
我试过这个:
Field catField = Class.forName("A.B").getField("cat");
但它给了我一个ClassNotFoundException。
提前致谢!
答案 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();
}