Pergunta

Eu tentei usar o código Sun postou em seu uso Proxy página , e eu tentei usar o DebugProxy para imprimir qual método é invocado. A coisa é, o objeto que eu estou criando um proxy para, precisa ter um argumento. Se eu tentar criar o proxy com um argumento para o construtor, eu recebo o seguinte erro:

Exception in thread "main" java.lang.ClassCastException: $Proxy0 cannot be cast to myPackage.myClass

Eu criei o proxy como esta:


MyClass mc = (MyClass) DebugProxy.newInstance(new MyClass(props));

Como posso criar uma instância de proxy, e ainda chamar o construtor certo?

Foi útil?

Solução

procuração TheJDK gerado não é do mesmo tipo da classe como o objeto que você está agindo como proxy. Em vez disso, ele implementa as mesmas interfaces do objeto alvo. Você precisa fundido a um desses tipos de interface.?

Se você olhar para o exemplo na página ligado a você, está lançando a Foo, não FooImpl.

Outras dicas

A sua classe implementar alguma interface que você está tentando teste? classes de proxy implementar apenas os métodos de uma interface. Se você deseja imprimir antes de / depois de cada método de uma classe (seja para métricas ou depuração) Gostaria de sugerir usando orientada a aspectos de programação (AOP). Eu nunca fiz isso, mas ouço AspectJ é o que você quer.

public interface SomeInterface {
    public void someMethod();
}

public MyClass implements SomeInterface {
...
}

// DebugProxy doesn't return your class, but a class which implements all of the interfaces
// you class implements
SomeInterface mc = (SomeInterface ) DebugProxy.newInstance(new MyClass(props));

Quando você quiser criar um proxy, você precisa fornecer uma interface de implementar. Não uma classe concreta.

Interfaces não descrevem construtores, então o que você quer fazer não é imediatamente viável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top