Вызов Java-функций из Clojure - PullRequest
       0

Вызов Java-функций из Clojure

10 голосов
/ 04 августа 2010

Я могу использовать (.toUpperCase "GOOD") в clojure, так как "GOOD" - это строка Java, а в строке Java есть метод toUpperCase.

Я также могу использовать (java.io.File / separator) из clojure как способ вызова функций Java.

Но почему я не могу вызвать (java.lang / Object wait3) или (java.lang.System / println "hi")?

  • Разве мы не можем использовать все функции Java из Clojure?
  • Если нет, есть ли какое-либо правило для их вызова?Если да, то где ссылка на эти функции?

Ответы [ 3 ]

18 голосов
/ 04 августа 2010

Вы можете использовать все функции Java из Clojure. Смотрите замечательную страницу о Clojure Java Interop .

В частности, вам просто нужно получить правильный синтаксис в зависимости от того, с какой именно Java-конструкцией вы работаете, например, выполнение метода println для статического члена "out" из java.lang.System:

(.println (System/out) "hi")
7 голосов
/ 04 августа 2010

Как отмечал предыдущий автор, два примера, которые вы приводите, немного отстают:

(.wait (java.lang.Object.) 3) ;; this actually throws an IllegalMonitorStateException

(.println java.lang.System/out "hi")

Должно работать!

3 голосов
/ 17 января 2014

Во-первых, функция Object.wait () не является статической, ее следует использовать как:

(. Wait (java.lang.Object.) 3)

Second,Функция Object.wait () должна вызываться после получения блокировки.В противном случае он выдаст исключение IllegalMonitorStateException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...