2009-07-27 24 views
1

我試圖編寫一個函數來播放一次聲音文件,使用我發現的一些資源。代碼如下:無法在Clojure中調用getCodeBase

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

問題是,(.getCodeBase)是一個格式不正確的成員表達式。我不知道該怎麼做。你怎麼稱呼這樣的方法?在我看的Java代碼中,它被簡單地稱爲是這樣的:

getCodeBase() 

我錯過了什麼嗎?

回答

4

.getCodeBase是一個實例方法調用,因此需要一個接收器(在Java中的點之前)。如果您的Java代碼只是getCodeBase(),則有兩種可能性:要麼它實際上意味着this.getCodeBase(),在這種情況下,你應該弄清楚什麼this在該方法中,並將其指定爲第一個參數:

(.getCodeBase obj) 

或者,這可能是因爲類的靜態方法(或它的基類之一),在這種情況下,你應該使用一個靜態方法調用表達式來代替:

(ClassName/getCodeBase) 

發帖稱你想翻譯的Java代碼,在足夠的背景下,可能會幫助更詳細地回答這個問題。