1

bean当我在 bean 上使用它时,我真的不明白该函数是如何工作的。此处的代码会引发异常:

(导入 java.lang.management.ManagementFactory)
(def 运行时 (bean (ManagementFactory/getRuntimeMXBean))
(:名称运行时)


;; =>
类 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

4

2 回答 2

2

你一定错过了,它就在那里。

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 邮件列表上询问。

于 2012-09-13T05:33:30.670 回答
0

我认为这是由此处的错误捕获的: http://dev.clojure.org/jira/browse/CLJ-978?page=com.atlassian.jira.plugin.system.issuetabpanels: all-tabpanel

点赞!

您可以使用可用的补丁滚动您自己的 bean 功能。

于 2012-12-08T22:22:01.613 回答