在Clojure中调用getCodeBase时遇到问题

时间:2009-07-27 20:45:59

标签: clojure audio java-interop

我正在尝试使用我找到的一些资源编写一个播放声音文件的函数。代码如下:

(defn play [file]
  (let [songp (URL. (.getCodeBase) file)
    song (.newAudioClip songp)]
    (. song play)))

问题是,(。getCodeBase)是一个格式错误的成员表达式。我不知道该怎么做。你怎么称呼这样的方法?在我看过的Java代码中,它被简单地称为:

getCodeBase()

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

.getCodeBase是一个实例方法调用,因此需要一个接收器(在Java之前的点之前)。如果您的Java代码只是getCodeBase(),那么有两种可能性:它实际上意味着this.getCodeBase(),在这种情况下,您应该弄清楚该方法中的this是什么,并将其指定为第一个论点:

(.getCodeBase obj)

或者,它可以是该类(或其基类之一)的静态方法,在这种情况下,您应该使用静态方法调用表达式:

(ClassName/getCodeBase)

使用足够的上下文发布您尝试翻译的Java代码可能有助于更详细地回答这个问题。