Я могу использовать (.toUpperCase "ХОРОШИЙ") в clojure, поскольку "ХОРОШИЙ" строка Java, и строка Java имеет toUpperCase метод.
Я также могу использовать (java.io. Файл/разделитель) от clojure как способ вызвать функции Java.
Но, почему я не могу звонить (java.lang/Object, ожидают 3) или (java.lang. System/println "привет")?
Вы можете использовать все функции Java из Clojure. См. Отличную страницу о взаимодействии Clojure Java .
В частности, вам просто нужно правильно настроить синтаксис в зависимости от того, с какой конструкцией Java вы имеете дело, например выполнение метода println для статического члена "out" из java.lang.System:
(.println (System/out) "hi")
Как отмечалось ранее, два приведенных вами примера немного не соответствуют действительности:
(.wait (java.lang.Object.) 3) ;; this actually throws an IllegalMonitorStateException
(.println java.lang.System/out "hi")
Должно работать!