In clojure, die Antworten auf Wie Sie die Funktionen von a auflisten Namespace? sind nützlich, wenn ich einen Namespace im Hinterkopf habe, insbesondere kann (ns-imports 'my-package)
mir über Java-Code berichten, der importiert wurde. Ich kann die Liste der Namespaces mit (all-ns)
finden. Gibt es eine ähnliche Möglichkeit, die Liste aller verfügbaren Java-Pakete zu finden und eine Vorschau der Java-Klassen anzuzeigen, die noch nicht importiert wurden?
Ich mache eine Menge JARs und .class-Dateien von Leiningen über :resource-paths
bzw. :java-source-paths
. Aber da ich neu in der Java-Codebasis bin, weiß ich wirklich nicht von Anfang an, welche Pakete definiert sind, um sie zu importieren. Ich könnte etwas mit find, xargs und grep machen, aber es wäre schön, diese Informationen programmatisch verfügbar zu haben. Darüber hinaus möchte ich in Zukunft in der Lage sein, "Reflektion" über die Java Codebasis innerhalb von Clojure zu machen, zum Beispiel wenn ich merke, wann eine neue Klasse definiert wurde.
In der LISP-Welt gibt es eine Funktion namens "do-external-symbols" und ich habe dafür gegooglet, diese Diskussion von 2007. Es scheint, dass die Dinge für Clojure selbst gelöst wurden, aber es ist weniger klar über Clojures Sicht auf Java.
Soweit ich mich erinnere, können Sie Java-Code von Clojure aufrufen. Ich habe kürzlich eine Bibliothek namens "Reflections" von Google entdeckt, die alles in Ihrem Klassenpfad für Sie auflistet. Ich habe Klassen, die JPA-Entitäten mit dieser Bibliothek waren analysiert, es war ziemlich einfach zu bedienen.
Wenn Sie Cider / Emacs oder auch nur lein repl
verwenden, gibt es eine gute Funktion zum automatischen Vervollständigen, die über den Tab-Button aufgerufen werden kann.
Diese Funktionalität scheint von der Kompliment von Alexander Yakushev angetrieben zu werden, also schlage ich vor, dass Sie genau hinsehen wie es funktioniert!
Tags und Links java reflection clojure leiningen