#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 .