Предполагая, что нет конструктора, который принимает все необходимые параметры инициализации, тогда единственный способ, который я знаю, - это то, как вы это сделали.
Единственное, что вы можете сделать, это обернуть все в такую функцию:
(defn init-url-conn [doInput ...other params..]
(let [url-conn (java.net.HttpURLConnection.)]
(doto url-conn
(.setDoInput true)
; more initialization on url-conn
)
url-conn))
И звоните с:
(let [url-connection
(let [url-conn (init-url-con true ...other params..)]
; use the url-connection
)
Однако это специфично для каждого объекта и действительно полезно, только если вы инициализируете объект этого класса более одного раза.
Также вы можете написать макрос, который принимает все имена методов и параметры и делает это. Но при вызове этот вызов не будет намного короче вашего первого примера.
Если у кого-то есть идея получше, я бы хотел ее увидеть, поскольку я спрашивал себя об этом только на днях ..