Tôi cần bằng cách nào đó gắn thẻ các chức năng Clojure nhất định là "đặc biệt" để mã Java có thể nhận ra chúng như vậy bằng cách sử dụng sự phản chiếu. Tôi đã cố gắng thêm chú thích vào một hàm, nhưng dường như nó không được hỗ trợ. Tôi đã cố gắng để reify
một giao diện mở rộng IFn
(để mã Java có thể nhận ra đối tượng hàm), nhưng điều đó không tốt bởi vì Clojure không trực tiếp sử dụng phương thức được sửa đổi như mã thực hiện invoke
, mà là một cuộc gọi gián tiếp đến Afunction
đối tượng thực sự đang triển khai phương thức (tôi cần gắn thẻ phương thức invoke
thực tế với mã chức năng thực tế).Làm cách nào để gắn thẻ chức năng Clojure để tôi có thể nhận ra nó với sự phản chiếu Java
Bất kỳ ý tưởng nào?
EDIT: thậm chí gắn thẻ theo cách có thể được truy cập bằng thư viện ASM (thay vì phản chiếu thông thường) sẽ ổn, nhưng tôi cần bằng cách nào đó gắn thẻ đối tượng AFunction
thực tế hoặc phương thức invoke
. Ngoài ra, tôi không thể truy cập đối tượng thực tế AFunction
- Tôi cần thẻ hiển thị trên lớp.
Cảm ơn! Thật không may, tôi thậm chí không có quyền truy cập vào chính đối tượng IFn - chỉ cho lớp của nó. Tôi cần phải bằng cách nào đó gắn thẻ lớp học (tôi thậm chí không cần đính kèm bất kỳ thông tin cụ thể nào, chỉ là một cách để xác định xem lớp học có "được đánh dấu" bằng cách nào đó) không. Tôi nghĩ rằng gắn thẻ nó bằng cách có phương pháp gọi xác định rằng nó ném một ngoại lệ kiểm tra nổi tiếng, nhưng không có cách nào mà tôi biết làm điều đó từ Clojure. – pron
Bạn có thể cung cấp một số mã mẫu của clojure và java để cho thấy lớp học từ clojure được tạo ra và truy cập từ Java như thế nào sẽ làm cho câu hỏi rõ ràng hơn – Ankur
Tôi sử dụng JavaAgent để thiết lập một số lớp. Tôi được thông báo khi một lớp mới được tải. Tôi muốn bằng cách nào đó gắn thẻ một hàm Clojure để tôi biết nếu nó đòi hỏi thiết bị đo đạc. – pron