我需要以某種方式將某些Clojure函數標記爲「特殊」,以便Java代碼可以使用反射來識別它們。我試圖給函數添加註釋,但顯然不支持。我試過reify
一個擴展爲IFn
的接口(以便Java代碼可以識別函數對象),但這並不好,因爲Clojure沒有直接使用實現方法作爲實現invoke
的代碼,而是直接調用Afunction
實際實現該方法的對象(我需要用實際功能代碼標記實際的invoke
方法)。我如何標記一個Clojure函數,以便我可以用Java反射識別它
任何想法?
編輯:甚至可以用ASM庫(而不是常規反射)訪問的方式標記會很好,但我需要以某種方式標記實際的AFunction
對象或invoke
方法。另外,我無法訪問實際的AFunction
對象 - 我需要該標記在課程中可見。
謝謝!不幸的是,我甚至無法訪問IFn對象 - 僅限於它的類。我需要以某種方式標記這個類(我甚至不需要附加任何特定的信息,只是以某種方式確定該類是否被「標記」)。我想通過讓invoke方法指定它引發一個衆所周知的檢查異常來標記它,但是我不知道從Clojure那裏做這件事。 – pron 2013-04-10 12:44:35
你能否提供一些clojure和java的示例代碼來展示如何從clojure創建類並從Java訪問,因爲這會使問題更加清晰 – Ankur 2013-04-10 12:46:23
我使用JavaAgent來測試某些類。我會在加載新課程時收到通知。我想以某種方式標記Clojure函數,以便知道它是否需要檢測。 – pron 2013-04-10 12:48:41