【问题标题】:Clojure: Is it possible to call package protected methods of java?Clojure:是否可以调用 java 的包保护方法?
【发布时间】:2014-06-02 22:00:54
【问题描述】:

我找不到与此相关的任何文档(或博客)。是否可以从 clojure 调用包保护方法?我们有一个庞大的 Java 代码库,我正在考虑是否可以开始围绕它们开发一些 clojure 库。

我尝试使命名空间与java中的包的命名空间相同,但找不到方法(静态)。

【问题讨论】:

  • 我没有一步一步来回答这个问题,但为了澄清起见,clojure 中的命名空间不是一个包,它是一个包含 var 名称到值的映射的对象。 (-> (all-ns) first .getMappings class) => clojure.lang.PersistentHashMap

标签: clojure clojure-java-interop


【解决方案1】:

这是一个快速的代码示例:

 (def a (ref 0))
 (def klass (class a))
 (def m (.getDeclaredMethod klass "currentVal" (into-array Class [])))
 (.setAccessible m true)
 (.invoke m a (into-array []))

你应该看看reflect API

不过,我建议只使用旧 Java 代码库中公开声明的字段和方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2013-02-23
    • 2011-04-21
    • 2015-11-05
    • 2018-12-10
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多