如何从 Clojure 获取 Java 类的方法?
最佳答案
[编辑2]
根据下面 M Smith 的评论,这完成了相同的任务,但提供了按方法名称排序并且仅返回方法:
(print-table
(sort-by :name
(filter :exception-types (:members (r/reflect "foo")))))
[/编辑2]
[编辑]
我原来的答案是指 Clojure 1.2,但是 Clojure 1.3 的情况发生了变化。现在,这可以在不依赖 Clojure 的 contrib 库的情况下运行:
(require '[clojure.reflect :as r])
(use '[clojure.pprint :only [print-table]])
(print-table (:members (r/reflect "foo")))
这提供了一种更加解耦的方法,reflect
函数提供有关传入参数的各种信息(在本例中为 String
"foo"
) 和 print-table
函数采用任何通用表格数据结构并漂亮地打印它。
此内容最初来自this thread on the Google Group .
[/编辑]
我会在 clojure.contrib.repl-utils
命名空间中使用 show
函数,它将打印对象(或类的类)的所有静态和实例成员一个东西)。我需要这样:
(require '[clojure.contrib.repl-utils :as ru])
以下是使用 Joda Time 的示例:
(import 'org.joda.time.DateTime)
(ru/show DateTime)
(ru/show (DateTime.))
第一个示例演示了如何简单地将类传递给 show
,而第二个示例演示了您也可以传递该类的实例。
这当然适用于许多底层为 Java 类的 Clojure 项目。下面是查看 java.lang.String 实例可用的所有方法的示例:
(ru/show "foo")
关于clojure - 如何从 Clojure 获取 Java 类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5821286/