возможно ли, чтобы clojure читал и работал с классами (файлами.class), сгенерированными компилятором?

#java #clojure

#java #clojure

Вопрос:

возможно ли чтение и работа с классами (файлами.class), сгенерированными Java-кодом?

например) CalculateSum.java — > CalculateSum.class -> Clojure принимает CalculateSum.class и встроить его в свой код?

Комментарии:

1. зачем встраивать его, а не использовать как API?

2. @Saket Вы имеете в виду использовать файлы .class в качестве api или кода Java?

3. Вы можете просто поместить их в jar и использовать

4. Я имею в виду как API. Просто включите его в свой путь к классу (либо как отдельный Jar, либо в вашей собственной библиотеке приложений)

Ответ №1:

Вам просто нужно убедиться, что файл класса находится в вашем пути к классу.

Вот несколько примеров кода.

hello.java:

  public class hello {
     public String sayHi() {
         return "hello world";
     }
 }

$ javac hello.java
$ java -cp clojure.jar:./ clojure.main
user=> (import 'hello) ;; Necessary in 1.2.1, but not 1.3.0
user=> (.sayHi (hello.))
"hello world"
  

Комментарии:

1. Я ценю этот краткий пример. Это самый короткий способ сделать это. когда это становится непрактичным (по мере роста проектов), используйте пространства имен и leiningen / maven

2. @ArthurUlfeldt Как мы можем вызвать файл jar, состоящий из файлов .class кода clojure?

3. @bmillare D:worktest-Clojure >java -cp clojure.jar clojure.main Clojure 1.2.1 user=> (.SayHi (привет.)) java.lang. Исключение IllegalArgumentException: не удается разрешить classname: hello (NO_SOURCE__FILE:1) user=>

4. @vikbehal, вы используете Windows, поэтому вам нужно разделять элементы в пути к классу точкой с запятой. изменить «java -cp clojure.jar clojure.main» для»java -cp clojure.jar ;./ clojure.main»

5. @bmillare D:worktest-Clojure >java -cp clojure.jar ;./ clojure.main Clojure 1.2.1 user=> (.SayHi (привет.)) java.lang. Исключение IllegalArgumentException: не удается разрешить classname: hello (NO_SOURCE__FILE:1)

Ответ №2:

Clojure был разработан для использования своей хост-платформы, JVM. компилятор clojure создает файлы классов, которые после создания ведут себя точно так же, как файл класса из любого другого источника; так что фактически вы уже это делаете 😉

Если вы хотите использовать класс java, просто поместите оператор import в свое пространство имен:

 (ns my.project
  (:import [com.them.library A B C]))
  

затем проверьте

http://clojure.org/java_interop для того, что делать дальше

Ответ №3:

Весь Clojure — это чистая Java и работает на JVM. Он может загружать и использовать любой допустимый класс Java.

Комментарии:

1. Clojure имеет обширную документацию с примерами взаимодействия с Java .