Utilizzando multimethods siamo in grado di aggiungere metodi a classi Java esistenti. La mia domanda è se sia possibile ridefinire un metodo specifico e come, dal codice Clojure. Per esempio, se avete la seguente classe,È possibile ridefinire i metodi Java da Clojure?
public class Shape {
public void draw() {
...
}
}
Mi piacerebbe essere in grado di eseguire qualcosa da aggiungere un prima metodo, come questa:
(attach-to-method Shape/draw :before
(println "... about to draw a shape"))
E dopo aver valutato quella forma, tutte le chiamate successive a disegnare inizierebbero a stampare una stringa prima di eseguire la chiamata stessa.
Il mio scopo con questo allegato di prima/dopo/intorno, comportamento simile a AOP, è che un framework che chiama quel metodo su un'istanza esistente può essere modificato dinamicamente e avviare l'esecuzione del codice appena allegato. Attualmente sto usando AspectJ per questo, ma sto arrivando a un punto in cui l'utilizzo di un compilatore diverso non è un'opzione, e sono curioso di sapere se posso semplicemente abbandonare AspectJ.
Ok, grazie. Sapevo di 'proxy' e' gen-class', volevo solo assicurarmi che la ridefinizione dei metodi non fosse ancora disponibile su Clojure - avevo qualche speranza che alcuni oscuri cambiamenti della JVM di cui non ero a conoscenza potevano abilitarlo, ma credo Dovrò restare con AspectJ, quindi. Grazie, Stuart e Brian! – Edgar