前言
除了JavaParser另一种可以用来分析Java代码的工具。
安装依赖
通过maven下载依赖:
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.3</version>
</dependency>
试用
写一个ClassVisitor用于访问类:
public class MyClassVisitor extends ClassVisitor {
public MyClassVisitor(int api) {
super(api);
}
@Override
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
System.out.println(version);
System.out.println(access);
System.out.println(name);
System.out.println(signature);
System.out.println(superName);
System.out.println(Arrays.toString(interfaces));
super.visit(version, access, name, signature, superName, interfaces);
}
}
然后随便找一个类来测试:
try {
ClassReader classReader = new ClassReader("java.util.HashMap");
ClassVisitor classVisitor = new MyClassVisitor(Opcodes.ASM6);
classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
}catch (Exception e) {
e.printStackTrace();
}
解析结果:
52
33
java/util/HashMap
<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/Map<TK;TV;>;Ljava/lang/Cloneable;Ljava/io/Serializable;
java/util/AbstractMap
[java/util/Map, java/lang/Cloneable, java/io/Serializable]
可以获取该类父类接口之类的信息。