cómo usar la función bean en clojure

Realmente no entiendo cómo el bean la función funciona cuando la estoy usando en frijoles. Este código aquí arroja una excepción:

(importar java.lang.management.ManagementFactory) (def runtime (bean (ManagementFactory/getRuntimeMXBean)) (:name runtime) ;; => La clase clojure.core$bean$fn__5177$fn__5178 no puede acceder a un miembro de la clase sun.management .RuntimeImpl con modificadores "public" [clase lanzada java.lang.IllegalAccessException]

pero la clase tiene un método llamado getName(). http://docs.oracle.com/javase/6/docs/api/java/lang/management/RuntimeMXBean.html

preguntado el 13 de septiembre de 12 a las 06:09

Escribí este contenedor para mejorar el análisis del sistema. github.com/zcaudate/sigmund -

2 Respuestas

Te lo debes haber perdido, está justo ahí.

getName() Devuelve el nombre que representa el runn (importar java.lang.management.ManagementFactory) (def runtime (bean (ManagementFactory/getRuntimeMXBean)) (:name runtime)

;; => Clase clojure.core$bean$fn_5177 $ fn_5178 no puede acceder a un miembro de la clase sun.management.RuntimeImpl con modificadores "público" [clase lanzada java.lang.IllegalAccessException]

pero la clase tiene un método llamado getName(). http://docs.oracle.com/javase/6/docs/api/java/lang/management/RuntimeMXBean.html

máquina virtual de Java.

Edit1:

Este problema es muy similar a uno aquí y la respuesta es aquí.

Clase RuntimeImpl devuelto por ManagementFactory.getRuntimeMXBean solo es visible el paquete pero implementa una interfaz pública visible RuntimeMXBean. Entonces lo que sucede es que la función bean intenta llamar a un método en la clase RuntimImpl pero no puede, ya que la clase solo es visible en el paquete. Creo que si tratara de llamar getMethod en la interfaz RuntimeMXBean hubiera funcionado


Sí, esto funciona:

(def mx-bean (ManagementFactory/getRuntimeMXBean))
(def interface-method 
  (.getMethod RuntimeMXBean "getName" (into-array java.lang.Class [])))
(.invoke interface-method mx-bean (into-array []))

No estoy seguro de si es un error o una característica. Recomendaría preguntar en la lista de correo de Clojure.

Respondido el 13 de Septiembre de 12 a las 08:09

ese es mi punto... el bean lanza una excepción cuando trato de acceder a él usando la implementación de clojure - fecha de caducidad

¡gracias por eso! hay soluciones para mi problema, pero es bastante interesante averiguar por qué. - fecha de caducidad

Creo que esto es capturado por un error aquí: http://dev.clojure.org/jira/browse/CLJ-978?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

¡Votalo!

Puede hacer rodar su propia función de frijol usando el parche disponible.

Respondido el 08 de diciembre de 12 a las 22:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.