我需要以某种方式将某些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