2010-06-24 59 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)))