0

次のクラス宣言を検討してください。

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

それから私は得たjava.lang.RuntimeException: java.lang.NoSuchMethodException: app.test.A_$$_javassist_0.<init>()

create メソッドに渡される 2 番目の引数のパラメーターの型に基づいて、javassist が正しいコンストラクターを使用してクラス A をインスタンス化しないのはなぜですか?

4

2 に答える 2

4

を渡すnew Class<?>[0]ことで、ファクトリに引数なしのコンストラクタを呼び出すように指示します。試す:

factory.create(new Class<?>[] { String.class }, new String[]{ "hello" }, mh);
于 2015-03-15T18:07:09.360 に答える
2

最後のステートメントを次のように置き換えることができます。

Class proxyKlass = factory.createClass();
Constructor<T> ctor = proxyKlass.getConstructor(String.class);
T res = ctor.newInstance(new String(){"hello"});
((Proxy) res).setHandler(handler);
于 2013-03-18T17:00:48.603 に答える