gpt4 book ai didi

java - 获取类的所有类依赖项(包括泛型)?

转载 作者:行者123 更新时间:2023-12-04 05:43:52 26 4
gpt4 key购买 nike

我想提取所有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com