如何在clojure中使用bean函数
当我在bean上使用如何在clojure中使用bean函数,clojure,Clojure,当我在bean上使用bean函数时,我真的不明白它是如何工作的。这里的代码引发了一个异常: (import java.lang.management.ManagementFactory) (def runtime (bean (ManagementFactory/getRuntimeMXBean)) (:name runtime) ;; => Class clojure.core$bean$fn__5177$fn__5178 can not access a member of class
bean
函数时,我真的不明白它是如何工作的。这里的代码引发了一个异常:
(import java.lang.management.ManagementFactory)
(def runtime (bean (ManagementFactory/getRuntimeMXBean))
(:name runtime)
;; =>
Class clojure.core$bean$fn__5177$fn__5178 can not access a member of class sun.management.RuntimeImpl with modifiers "public"
[Thrown class java.lang.IllegalAccessException]
(导入java.lang.management.ManagementFactory)
(def运行时(bean(ManagementFactory/getRuntimeMXBean))
(:name运行时)
;; =>
类clojure.core$bean$fn\uuuu5177$fn\uuuuu5178无法使用修饰符“public”访问类sun.management.RuntimeImpl的成员
[抛出类java.lang.IllegalAccessException]
但是该类确实有一个名为
getName()
的方法,您一定错过了,它就在那里
getName()返回表示runn的名称
(导入java.lang.management.ManagementFactory)
(def运行时(bean(ManagementFactory/getRuntimeMXBean))
(:name运行时)
;;=>
类clojure.core$bean$fn_5177$fn_5178无法使用修饰符“public”访问类sun.management.RuntimeImpl的成员
[抛出类java.lang.IllegalAccessException]
但该类确实有一个名为getName()的方法
使用Java虚拟机
编辑1:
这一问题与一个问题非常相似,对此的回应也是如此
类RuntimeImpl
由ManagementFactory返回。getRuntimeMXBean
是唯一可见的包,但它实现了公共可见接口RuntimeMXBean
。因此,函数bean
尝试调用类RuntimeImpl
上的方法,但它不能,因为类只有包可见。I试想一下,如果它试图在接口RuntimeMXBean
上调用getMethod
,它会工作的
是的,这是有效的:
(def mx-bean (ManagementFactory/getRuntimeMXBean))
(def interface-method
(.getMethod RuntimeMXBean "getName" (into-array java.lang.Class [])))
(.invoke interface-method mx-bean (into-array []))
我不确定这是一个bug还是一个功能。我建议您在Clojure邮件列表中询问。我认为这是由一个bug捕获的: 投票吧
您可以使用可用的补丁来运行自己的bean函数。这是我的观点……当我尝试使用clojure的实现访问它时,bean会抛出一个异常。谢谢!我的问题有解决方法,但找出原因是很有意思的。顺便说一句,我编写这个包装器是为了改进系统分析