2015-04-17 17 views
9

In clojure, le risposte a How to list the functions of a namespace? sono utili se ho in mente un namespace, in particolare (ns-imports 'my-package) mi può dire del codice Java che è stato importato. Posso trovare l'elenco degli spazi dei nomi con (all-ns). C'è un modo simile per trovare l'elenco di tutti i pacchetti java disponibili e per visualizzare l'anteprima delle classi java che non sono ancora state importate?elenco disponibile pacchetti java e classi all'interno di clojure

Sto creando un sacco di file JAR e .class disponibili da Leiningen tramite :resource-paths e :java-source-paths rispettivamente. Ma dal momento che sono nuovo alla base di codice Java, non so in realtà quali sono i pacchetti definiti per importarli. Potrei fare qualcosa con find, xargs e grep, ma sarebbe bello avere queste informazioni disponibili a livello di programmazione. Inoltre, in futuro, mi piacerebbe essere in grado di fare "riflessione" sulla base di codice Java da Clojure, ad esempio, notando quando una nuova classe è stata definita.

Nel mondo LISP, c'è una funzione chiamata `fare-esterni-simboli e ho googled per questo, alzare this discussione a partire dal 2007. E sembra che le cose sono stati risolti per Clojure sé, ma è meno chiaro Clojure di vista di Java.

risposta

1

Per quanto mi ricordo, è possibile chiamare il codice Java da Clojure. Recentemente ho scoperto una libreria chiamata "Reflections" di Google che elencherà qualsiasi cosa nel tuo classpath per te. Ho analizzato le classi che erano entità JPA con questa libreria, era abbastanza facile da usare.

+1

Ecco alcune cose che possono migliorare questa risposta: un collegamento a quella libreria e un esempio di codice che elenca effettivamente le classi. O almeno un link ai documenti che ne ha o ne fa riferimento uno. –

1

Se si utilizza sidro/emac o anche solo lein repl, la funzionalità di completamento automatico è accessibile tramite il pulsante di tabulazione.

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

Questa funzionalità sembra essere guidato dalla libreria compliment, da Alexander Yakushev, quindi vi consiglio di dare uno sguardo da vicino come funziona!

Problemi correlati