あなたはそれを逃したにちがいありません、それはすぐそこにあります。
getName() runn を表す名前を返します (import java.lang.management.ManagementFactory) (def runtime (bean (ManagementFactory/getRuntimeMXBean)) (:name runtime)
;; => クラス clojure.core$bean$fn_ 5177$fn _5178 はクラス sun.management.RuntimeImpl のメンバーに "public" 修飾子でアクセスできません [Thrown class 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 メーリング リストで質問することをお勧めします。