Clojure 协议是否支持类型提示?

Do Clojure Protocols Support Type Hints?

Clojure 协议是否支持类型提示,以便可以像在静态类型语言中一样重载具有相同参数(类型提示除外)的相同方法名称?

例如,

(defprotocol IFoo
  (get-val [this ^String astring])
  (get-val [this ^AClass aclass]))

如果没有,我可以实现这个,还是必须重命名这些方法?

Afaik,你不能用 defprotocol 做到这一点,但用 definterface 还是可以的:

(definterface Intf
  (^String add [^String s])
  (^long add [^long l]))

(defrecord Rec [^long data]
  Intf
  (^String add [self ^String s] (str data s))
  (^long add [self ^long l] (+ data l)))

user> (let [r (Rec. 101)]
        [(.add r "asd")
         (.add r 200)])

;;=> ["101asd" 301]