我查看了一些使用 ASM 的 java 字节码,当我看到这些行时非常惊讶
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 {}
}