【发布时间】:2015-02-25 11:31:38
【问题描述】:
给定以下代码-sn-p,我得到输出“B”和“错误”:
public class Test {
private static class A {
static final B c = new B();
}
private static class B extends A {
static final B c = A.c;
}
public static void main(String[] args) throws Exception {
for(Class<?> cls : Test.class.getDeclaredClasses()) {
if(cls.getDeclaredFields()[0].get(null) == null) {
System.out.println(cls.getSimpleName());
}
}
if(B.class.getDeclaredField("c").get(null) == null) {
System.out.println("error");
}
}
}
但它变得更加奇怪。如果我注释掉 for 循环,我不会得到任何输出 - 所以没有错误。此外,如果我在进行反射之前直接访问字段 B.c 而不进行反射,则不会发生问题。 为什么会这样,我该如何解决?
【问题讨论】:
-
我会重构代码以消除两个类之间的循环依赖。这几乎肯定也能解决您的问题。
标签: java reflection static initialization