为什么Javassist ProxyFactory的create方法没有根据args参数调用正确的构造函数?

为什么Javassist ProxyFactory的create方法没有根据args参数调用正确的构造函数?,java,javassist,Java,Javassist,考虑以下类声明: class A{ private String x; public A(String x) { this.x = x; } } 当我尝试使用javassist为类a创建代理时,使用以下代码: ProxyFactory factory = new ProxyFactory(); factory.setSuperclass(A.class); MethodHandler mh = new MethodHandler() {...};

考虑以下类声明:

class A{
    private String x;
    public A(String x) {
            this.x = x;
    }
}
当我尝试使用javassist为类a创建代理时,使用以下代码:

ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(A.class);
MethodHandler mh = new MethodHandler() {...};
A a = (A) factory.create(new Class<?>[0], new String(){"hello"}, mh);
ProxyFactory=newproxyFactory();
工厂设置超级类(A类);
MethodHandler mh=新MethodHandler(){…};
A=(A)factory.create(新类[0],新字符串(){“hello”},mh);
然后我得到了
java.lang.RuntimeException:java.lang.NoSuchMethodException:app.test.A\u$\ uJavassist\u0。(


为什么javassist不根据传递给create方法的第二个参数的参数类型,使用正确的构造函数实例化类A?

您可以用以下语句替换最后一条语句:

Class proxyKlass = factory.createClass();
Constructor<T> ctor = proxyKlass.getConstructor(String.class);
T res = ctor.newInstance(new String(){"hello"});
((Proxy) res).setHandler(handler);
Class proxyKlass=factory.createClass();
Constructor=proxyKlass.getConstructor(String.class);
T res=ctor.newInstance(新字符串(){“hello”});
((代理)res.setHandler(处理程序);

您可以将最后一条语句替换为:

Class proxyKlass = factory.createClass();
Constructor<T> ctor = proxyKlass.getConstructor(String.class);
T res = ctor.newInstance(new String(){"hello"});
((Proxy) res).setHandler(handler);
Class proxyKlass=factory.createClass();
Constructor=proxyKlass.getConstructor(String.class);
T res=ctor.newInstance(新字符串(){“hello”});
((代理)res.setHandler(处理程序);
通过传递
新类[0]
,您告诉工厂调用无参数构造函数。尝试:

factory.create(new Class<?>[] { String.class }, new String[]{ "hello" }, mh);
factory.create(新类[]{String.Class},新字符串[]{“hello”},mh);
通过传递
新类[0]
,您告诉工厂调用无参数构造函数。尝试:

factory.create(new Class<?>[] { String.class }, new String[]{ "hello" }, mh);
factory.create(新类[]{String.Class},新字符串[]{“hello”},mh);

是的,我理解您的方法,但是为什么
代理工厂的
创建
方法不遵循相同的解决方案?是的,我理解您的方法,但是为什么
代理工厂的
创建
方法不遵循相同的解决方案?