Sử dụng đa phương thức, chúng tôi có thể thêm các phương thức vào các lớp Java hiện có. Câu hỏi của tôi là liệu có thể xác định lại một phương thức cụ thể hay không và cách từ mã Clojure. Ví dụ, nếu bạn có lớp sau,Có thể định nghĩa lại các phương thức Java từ Clojure không?
public class Shape {
public void draw() {
...
}
}
Tôi muốn để có thể chạy một cái gì đó để thêm một phương pháp trước, như thế này:
(attach-to-method Shape/draw :before
(println "... about to draw a shape"))
Và sau khi đánh giá hình thức đó, tất cả các cuộc gọi tiếp theo để vẽ sẽ bắt đầu in một chuỗi trước khi thực hiện cuộc gọi.
Mục đích của tôi với tệp đính kèm này trước/sau/xung quanh, hành vi giống như AOP, là khuôn khổ gọi phương thức đó trên cá thể hiện có có thể được thay đổi động và bắt đầu chạy mã mới đính kèm. Hiện tại tôi đang sử dụng AspectJ cho điều đó, nhưng tôi đang đi đến một điểm mà bằng cách sử dụng một trình biên dịch khác nhau không phải là một lựa chọn, và tôi tò mò muốn biết nếu tôi chỉ có thể mương AspectJ.
Ok, cảm ơn. Tôi biết về 'proxy' và' gen-class', tôi chỉ muốn chắc chắn rằng phương pháp định nghĩa lại phương pháp vẫn không có trên Clojure - tôi hi vọng rằng một số thay đổi gần đây JVM mà sự tồn tại mà tôi không biết có thể kích hoạt nó, nhưng tôi đoán Tôi sẽ phải gắn bó với AspectJ, sau đó. Cảm ơn, Stuart và Brian! – Edgar