Usando multimétodos, podemos agregar métodos a las clases de Java existentes. Mi pregunta es si es posible redefinir un método específico, y cómo, desde el código Clojure. Por ejemplo, si usted tiene la siguiente clase,¿Es posible redefinir los métodos Java de Clojure?
public class Shape {
public void draw() {
...
}
}
me gustaría ser capaz de ejecutar algo que añadir un antes método, como este:
(attach-to-method Shape/draw :before
(println "... about to draw a shape"))
Y después de la evaluación de esa forma, todas las llamadas subsiguientes para dibujar comenzarían a imprimir una cadena antes de realizar la llamada.
Mi propósito con este adjunto de antes/después/alrededor, comportamiento similar a AOP, es que un marco que llama a ese método en una instancia existente se puede cambiar dinámicamente y comenzar a ejecutar el código recién agregado. Actualmente estoy usando AspectJ para eso, pero estoy llegando al punto en que usar un compilador diferente no es una opción, y tengo curiosidad por saber si puedo deshacerme de AspectJ.
Ok, gracias. Sabía de 'proxy' y' gen-class', solo quería asegurarme de que la redefinición de métodos aún no estaba disponible en Clojure. Tenía alguna esperanza de que algunos cambios recientes de JVM desconocidos cuya existencia desconocía podría permitirlo, pero supongo Tendré que quedarme con AspectJ, entonces. ¡Gracias, Stuart y Brian! – Edgar