Java 如何使用1+;使用ByteBuddy的args构造函数

Java 如何使用1+;使用ByteBuddy的args构造函数,java,byte-buddy,Java,Byte Buddy,我想创建一个具有一个构造函数的代理:HttpURLConnection(URL u)。如何使用ByteBuddy对此类类进行子类化,而不使用非参数构造函数创建自定义的“空”类 new ByteBuddy().subclass(HttpURLConnection.class) .method(ElementMatchers.any()) .intercept(InvocationHandlerAdapter.of(proxyHand

我想创建一个具有一个构造函数的代理:
HttpURLConnection(URL u)
。如何使用ByteBuddy对此类类进行子类化,而不使用非参数构造函数创建自定义的“空”类

 new ByteBuddy().subclass(HttpURLConnection.class)
                .method(ElementMatchers.any())
                .intercept(InvocationHandlerAdapter.of(proxyHandler))
                .make()
                .load(HttpURLConnection.class.getClassLoader())
                .getLoaded()
                .newInstance();
目前,由于以下原因,它失败了

Caused by: java.lang.NoSuchMethodException: net.bytebuddy.renamed.java.net.HttpURLConnection$ByteBuddy$Mr8B9wE2.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)

并在
newbytebuddy()子类(ProxiedHttpURLConnection.class)
中使用该选项,效果很好。承包商有一个简单的问题,不太确定如何做

您可以定义自定义构造函数并使用
MethodCall
工具调用特定的超级构造函数,例如

builder = builder.defineConstructor(Visibility.PUBLIC)
  .intercept(MethodCall.invoke(HttpURLConnection.class.getDeclaredConstructor(URL.class))
                 .with((Object) null))
默认情况下,Byte Buddy不匹配超类构造函数,因此可以查找采用URL并手动提供null参数的已声明构造函数


您可以通过定义
构造函数策略段
作为
子类
的第二个参数来避免此创建。您可以定义自定义构造函数并使用
方法调用
工具调用特定的超级构造函数,例如

builder = builder.defineConstructor(Visibility.PUBLIC)
  .intercept(MethodCall.invoke(HttpURLConnection.class.getDeclaredConstructor(URL.class))
                 .with((Object) null))
默认情况下,Byte Buddy不匹配超类构造函数,因此可以查找采用URL并手动提供null参数的已声明构造函数

通过将
构造函数策略段
定义为
子类
的第二个参数,可以避免这种创建