我看着使用ASM一些Java字节码,并感到非常惊讶,当我看到这几行Java类中的INNERCLASS字段如何使用?
public class C1 {
// compiled from: C1.java
// access flags 0x9
public static INNERCLASS C2$C3 C2 C3
//..
}
C1
有INNERCLASS
声明包含在C2
类。这是应该如何?如果是这样,为什么它需要,而不是导致多余的冗余?
我使用Eclipse Indigo SR1编译了一个最小的示例,该示例在外部类型的主方法中具有内部类型的局部变量,以表示它的价值。我应该报告一个错误吗?
public class C1 {
public static void main(String[] args) throws Exception {
C2.C3 c3 = new C2.C3();
ClassReader cr = new ClassReader(C1.class.getName());
cr.accept(new TraceClassVisitor(new PrintWriter(System.out)), 0);
}
}
public class C2 {
public static class C3 {}
}
原始Java文件是什么样的?从你的描述来看,这并不是很清楚。不必是完整的代码,但看到重要的部分可能会有所帮助。 – eran 2012-07-08 14:03:09
我将精确的测试代码添加到问题中;它只不过是我说的;) – 2012-07-08 14:16:08