2010-08-04 13 views
9

"GOOD"은 자바 문자열이고 java 문자열은 toUpperCase 메서드이므로 (.toUpperCase "GOOD")을 사용할 수 있습니다.Clojure에서 Java 함수 호출하기

또한 java 함수를 호출하는 방법으로 clojure에서 (java.io.File/separator)를 사용할 수 있습니다.

하지만 (java.lang/Object wait 3) 또는 (java.lang.System/println "hi")를 호출 할 수없는 이유는 무엇입니까?

  • Clojure의 모든 Java 기능을 사용할 수 있습니까?
  • 그렇지 않은 경우 전화를 걸기위한 규칙이 있습니까? 그렇다면 해당 기능에 대한 참조는 어디에 있습니까?

답변

17

Clojure의 모든 Java 기능을 사용할 수 있습니다. Clojure의 Java interop 페이지를 참조하십시오.

특히, 어떤 Java 구조를 다루는 지에 따라 구문을 올바르게 이해하면됩니다. java.lang.System의에서 "밖으로"정적 멤버에 println 메소드 메소드를 실행 :

(.println (System/out) "hi") 
+2

prob가 없으므로 구분 기호는 System 클래스의 정적 멤버와 같은 방식으로 File 클래스의 정적 멤버입니다. println의 경우, 실제로 두 개의 Java interop 구조체 (System.out에 액세스 한 다음 그 결과에 대해 println을 호출)를 연결합니다. – mikera

6

이전 포스터가 언급 한 바와 같이, 당신이주는 두 가지 예는 조금 떨어져 :

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

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

해야 작업! 우선

2

,되는 Object.wait() 함수가 정적 기능없는 경우로서 사용해야 :

(. .wait (java.lang.Object 상위) 3)

둘째로 Object.wait() 함수는 잠금을 얻은 후에 호출해야합니다. 그렇지 않은 경우, IllegalMonitorStateException가 슬로우됩니다.

관련 문제