【问题标题】:list available java packages and classes within clojure列出 clojure 中可用的 java 包和类
【发布时间】:2015-04-17 04:17:04
【问题描述】:

在 clojure 中,如果我有一个命名空间,How to list the functions of a namespace? 的答案很有用,特别是 (ns-imports 'my-package) 可以告诉我有关已导入的 Java 代码的信息。我可以使用(all-ns) 找到命名空间列表。有没有类似的方法可以找到所有可用的java包列表,以及预览还没有导入的java类?

我正在分别通过:resource-paths:java-source-paths 从Leiningen 制作大量JAR 和.class 文件。但由于我是 Java 代码库的新手,我实际上并不知道为了导入它们而定义了哪些包。我可以用 find、xargs 和 grep 做一些事情,但如果能以编程方式提供这些信息会很好。此外,在未来,我希望能够在 Clojure 中对 Java 代码库进行“反射”,例如,注意何时定义了一个新类。

在 LISP 世界中,有一个名为 `do-external-symbols' 的函数,我在 google 上搜索了一下,找到了 2007 年的 this 讨论。似乎 Clojure 本身的问题已经解决了,但不太清楚Clojure 对 Java 的看法。

【问题讨论】:

    标签: java reflection clojure leiningen


    【解决方案1】:

    如果您使用的是 cider/emacs 甚至只是 lein repl,则可以通过选项卡按钮访问很好的自动完成功能。

    => (java.lang.B  <press tab>
    java.lang.Boolean  java.lang.BootstrapMethodError  java.lang.Byte
    

    这个功能似乎是由 Alexander Yakushev 的库 compliment 驱动的,所以我建议你仔细看看它是如何工作的!

    【讨论】:

      【解决方案2】:

      据我所知,您可以从 Clojure 调用 Java 代码。我最近从 Google 发现了一个名为“Reflections”的库,它会为您列出类路径中的所有内容。我已经用这个库分析了作为 JPA 实体的类,它非常易于使用。

      【讨论】:

      • 这里有一些东西可以让这个答案变得更好:一个指向该库的链接和一个实际列出类的代码示例。或者至少是指向具有或引用一个文档的文档的链接。
      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 2013-02-10
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多