ASM指南翻译-3
2.1接口和组件
?
2.2.1表现Presentation
?????????????????? returnnull;
???????? }
???????? publicvoid visitEnd() {
?????????????????? System.out.println("}");
???????? }
}
第二步,将ClassPrinter和ClassReader结合起来,这样,ClassReader产生的事件就可以被我们的ClassPrinter消费了:
ClassPrinter cp = new ClassPrinter();
ClassReader cr = newClassReader("java.lang.Runnable");
cr.accept(cp, 0);
?
上面的第二行代码创建了一个ClassReader来解析Runnable类。最后一行代码中的accept方法解析Runnable类的字节码,并且调用cp上对应的方法。结果如下:
java/lang/Runnable extends java/lang/Object{
run()V
}
?
注意,这里有多种方式来构造一个ClassReader的实例。可以通过类名,例如上面的例子,或者通过类的字节数组。或者类的输入流。类的输入流可以通过ClassLoader的getResourceAdStream方法:
cl.getResourceAsStream(classname.replace(’.’,’/’) + ".class");