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;>;