Возникли проблемы с вызовом getCodeBase в Clojure

Я пытаюсь написать функцию для воспроизведения звукового файла один раз, используя найденные ресурсы. Код выглядит следующим образом:

(defn play [файл]
  (пусть файл [songp (URL. (.getCodeBase)))
    песня (.newAudioClip songp)]
    (. Воспроизведение песни)))

Проблема в том, что (.getCodeBase) является некорректным выражением члена. Я не уверен, что делать. Как вы называете такой метод? В коде Java, который я посмотрел, он просто назывался так:

getCodeBase()

Я что-то пропустил?

1 ответ

Решение

.getCodeBase является вызовом метода экземпляра, и как таковой требует приемника (что идет перед точкой в ​​Java). Если ваш Java-код был просто getCodeBase()то есть две возможности: либо это на самом деле означает this.getCodeBase()в этом случае вы должны выяснить, что this был в этом методе, и укажите его в качестве первого аргумента:

(.getCodeBase obj)

Или это может быть статический метод этого класса (или один из его базовых классов), и в этом случае вы должны использовать вместо этого выражение вызова статического метода:

(ClassName/getCodeBase)

Публикация кода Java, который вы пытаетесь перевести, с достаточным контекстом, вероятно, поможет ответить на этот вопрос более подробно.

Другие вопросы по тегам