你一定错过了,它就在那里。
getName() 返回代表 runn 的名称 (import java.lang.management.ManagementFactory) (def runtime (bean (ManagementFactory/getRuntimeMXBean)) (:name runtime)
;; => Class clojure.core$bean$fn_ 5177$fn _5178 无法使用修饰符“public”访问 sun.management.RuntimeImpl 类的成员 [抛出类 java.lang.IllegalAccessException]
但是该类确实有一个名为 getName() 的方法。http://docs.oracle.com/javase/6/docs/api/java/lang/management/RuntimeMXBean.html
Java 虚拟机。
编辑1:
此问题与此处的问题非常相似,对此的响应是此处。
RuntimeImpl
返回的类ManagementFactory.getRuntimeMXBean
只是包可见,但它实现了公共可见接口RuntimeMXBean
。所以发生的事情是该函数bean
试图调用类上的方法,RuntimImpl
但它不能,因为类只是包可见。我认为如果它试图调用getMethod
接口RuntimeMXBean
它会起作用。
是的,这有效:
(def mx-bean (ManagementFactory/getRuntimeMXBean))
(def interface-method
(.getMethod RuntimeMXBean "getName" (into-array java.lang.Class [])))
(.invoke interface-method mx-bean (into-array []))
我不确定这是错误还是功能。我建议在 Clojure 邮件列表上询问。