Hum… você está me dizendo que todos os métodos dessa classe abstrata têm de ser implementados pelo seu InvocationHandler ou apenas alguns deles?
Acho que o jeito tradicional de fazer o que você quer é criar os bytecodes, em tempo de execução (ou de deployment), de uma classe que estende essa classe abstrata.
A classe java.lang.Proxy faz isso também “por debaixo dos panos”. Ela é implementada, se não me engano, usando-se o BCEL - http://jakarta.apache.org/bcel/ . (Você não vai ver o JAR do BCEL no JDK porque a Sun mudou os packages de “org.apache.bcel” para “sun.org.apache.bcel” para pôr uma cópia própria e privada do BCEL dentro do JDK).
Mas se você fizer isso, use o Javassist ou o ASM.
Marky.Vasconcelos
Seriam todos sim… é que eu estou trabalhando em uma linguagem de Script e consegui direcionar os chamados da interface para rodar o respectivo código do script… mas queria fazer isso para classes também.
Vou dar uma estudade no Javassist e o no ASM
fwbrasil
Também tem o CGLib que faz esse trabalho.
Marky.Vasconcelos
Escolhi o próprio BCEL para fazer isso, e estou usando os pacotes que já vem com o JRE.
Mas agora estou com uma duvida.
No BCEL como eu consigo acessar os parametros que foi passado no metodo que estou construindo?
T
thingol
O BCEL tem um nível muito, muito baixo para ser útil para resolver o seu problema.
Não dá para usar o JavAssist? Ele já resolve todos esses problemas que você vai encontrar.
Marky.Vasconcelos
Eu queria evitar ter que depender de jars adicionais para funcionar. Eu vi que o Java tem internamente o BCEL e o ASM.
E para falar a verdade minha intenção não é mais criar uma classe que extende uma minha… eu quero criar uma nova em runtime.
Eu continuo usando o BCEL? Vou pro ASM? ou então desisto da ideia de ter mais jars e uso o JavaAssist?