我想提取所有Class
来自给定 Class
的依赖关系(为了使用我的类及其所有依赖项创建 Arquillian 测试)。
我几乎无法做到这一点(使用 CtClass.getRefClasses()
中的 Javassist ),但我坚持使用泛型(似乎 Javassist 正确解析泛型, but doesn't have any API to get them )。
这是我的递归的核心inspect
目前的方法:
for (String className : (Iterable<String>)ClassPool.getDefault().get(klass.getName()).getRefClasses()) {
try {
inspect(Class.forName(className), classSet); // recursion
} catch ( // ClassNotFoundException and NoClassDefFoundError handling
}
}
该迭代似乎可以正确获取所有 Class
es 依赖项,但如果 Class
我想检查是否正在操纵例如 List<MyClass>
,我不会MyClass
来自Collection
返回者 getRefClasses()
.
我检查了.class
文件,字节码包含该信息 ( Ljava/util/List<Lmy/company/MyClass;>;
)。
你知道我可以用来提取所有使用过的另一个API吗Class
es 来自给定的 Class
?
最佳答案
您可以使用ASM并实现一个访问者,每当访问类型指令或变量声明等时记录所有类。您还可以获得签名描述符(即 Ljava/util/List<Lmy/company/MyClass;>;
)。
但是,并非所有依赖项都会出现在类文件中。假设您创建了一个 new ArrayList<MyClass>
并且不将其分配给变量,则类型参数信息 will be lost .
关于java - 获取一个类的所有类依赖项(包括泛型)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929263/