Java 使用asm如何声明非泛型类实现泛型接口

Java 使用asm如何声明非泛型类实现泛型接口,java,java-bytecode-asm,Java,Java Bytecode Asm,例如: class A implements Supplier<String> { String get(){ .... } } 这些接口声明均失败: java/util/function/Supplier java/util/function/Supplier java/util/function/Supplier java/util/function/Supplier java/util/function/Supplier您可以使用javap来

例如:

class A implements Supplier<String> {

    String get(){
        ....
    }
}
这些接口声明均失败:

java/util/function/Supplier

java/util/function/Supplier

java/util/function/Supplier

java/util/function/Supplier

java/util/function/Supplier

您可以使用javap来查看javac是如何编译这个类的。对于您的签名,值为:

Ljava/lang/Object;Ljava/util/function/Supplier<Ljava/lang/String;>;
Ljava/lang/Object;Ljava/util/function/Supplier;
作为第一个参数,您需要提供非泛型超类,然后是泛型值。该参数现在为
null
,表示非泛型类,跳过该属性

请注意,泛型方法需要桥接方法才能发挥作用。您需要同时实现
objectget()
stringget()
,只需将第一个方法委托给第二个方法即可。将第一种方法标记为合成和
ACC_桥

Ljava/lang/Object;Ljava/util/function/Supplier<Ljava/lang/String;>;