Java 使用ASM查找“的通用签名”;隐式;变量

Java 使用ASM查找“的通用签名”;隐式;变量,java,generics,bytecode,java-bytecode-asm,Java,Generics,Bytecode,Java Bytecode Asm,我正在使用ASM4.0构建一个依赖项搜索工具,我发现了一个我无法解决的问题。我遇到的问题与在下面的代码中识别MyClass的用法有关 public void aMethod() { new ArrayList<? extends MyClass>(); } public-void-aMethod(){ 方法体中的新ArrayList类型参数信息在字节码生成过程中被丢弃。您无法通过分析字节码来获取它。获取此信息的唯一方法是使用调试信息。如果有,您可以尝试推断局部变量的名称和类型

我正在使用ASM4.0构建一个依赖项搜索工具,我发现了一个我无法解决的问题。我遇到的问题与在下面的代码中识别MyClass的用法有关

public void aMethod() {
   new ArrayList<? extends MyClass>();
}
public-void-aMethod(){

方法体中的新ArrayList类型参数信息在字节码生成过程中被丢弃。您无法通过分析字节码来获取它。

获取此信息的唯一方法是使用调试信息。如果有,您可以尝试推断局部变量的名称和类型。如果没有,您只能推断类型取决于类的使用方式。

我不确定这是否正确。如果代码更改为包含本地变量声明,即ArrayList list=new ArrayList(),则在MethodVisitor.visitLocalVariable()时,包括类型参数在内的签名可用已执行。据我所知,所有泛型类型参数信息都存储为类属性…问题是如何使用ASM访问正确的属性。有关局部变量的信息是可选的,仅由debuggng接口使用。我已更正。调试信息可能确实包括局部变量类型。
new ArrayListI相信是这样;他正在指定通配符类型的上限。
public void aMethod() {
    ArrayList<? extends MyClass> list = new ArrayList<? extends MyClass>();
}