【发布时间】:2012-07-08 13:43:34
【问题描述】:
我查看了一些使用 ASM 的 java 字节码,当我看到这些行时非常惊讶
public class C1 {
// compiled from: C1.java
// access flags 0x9
public static INNERCLASS C2$C3 C2 C3
//..
}
C1 对包含在C2 中的类有一个INNERCLASS 声明。这是应该的吗?如果是这样,为什么需要它,这不会导致很多冗余吗?
我使用 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文件是什么样的?从你的描述中不是很清楚。不必是完整的代码,但查看重要部分可能会有所帮助。
-
我在问题中添加了确切的测试代码;真的只是我说的;)
标签: java compiler-construction bytecode inner-classes