2010-06-24 61 views
7

我似乎做錯了什麼。我已經建立了從混帳Clojure的,因此我調用它:在Clojure中導入Java類

java -cp clojure.jar clojure.main 

我得到的REPL,然後I型:

(import 'java.lang.string) 

,我也得到:

java.lang.ClassNotFoundException: java.lang.string (NO_SOURCE_FILE:1) 

我因爲我認爲它必須存在於類路徑的某個地方,所以我試着用lang.string試試這個。我試過其他圖書館,都沒有太多的運氣。我究竟做錯了什麼?

回答

14

String應該大寫,就這些了。

user> (import 'java.lang.String) 
java.lang.String 

但是,一切都在java.lang默認已經導入和可用的,所以你不應該需要做到這一點。

2

Bleh,我想我找到了。首先語法應該是:

(import java.lang.String) 

另請注意,它的字符串不是字符串。

+1

不需要。報價是導入所必需的。見Brian的答案。但不適用於ns子句。看Bozhidar的答案。 – kotarak 2010-06-25 12:43:03

+0

實際上,報價也不需要導入。至少在clojure 1.1中,我正在使用... – 2010-06-26 19:31:18

8

順便說一下,在非repl練習中,包含Java類的最佳方式可能是ns宏。

(ns foo.bar 
    (:refer-clojure :exclude [ancestors printf]) 
    (:require (clojure.contrib sql sql.tests)) 
    (:use (my.lib this that)) 
    (:import (java.util Date Timer Random) 
      (java.sql Connection Statement)))