目前类型提示在包含运行时值的字面量中丢失
`
user=> (set! warn-on-reflection true)
true
user=> (fn [x] (java.util.HashMap. ^java.util.Map {"foo" x}))
反射警告,null:1:9 - 调用java.util.HashMap构造函数无法解析。
function[user/eval7479/fn--7480]
`
目前可行的解决方案是引入一个局部变量并对绑定进行类型提示
`
user=> (fn [x] (let [^java.util.Map m {"foo" x}] (java.util.HashMap. m)))
function[user/eval7487/fn--7488]
`
附带的补丁通过跟踪字面量值的类型提示来解决此问题,即使在原始情况下也能消除反射
`
user=> (set! warn-on-reflection true)
true
user=> (fn [x] (java.util.HashMap. ^java.util.Map {"foo" x}))
function[user/eval7479/fn--7480]
`
方法:保留字面量集合中的用户提示
补丁:0001-CLJ-1929-preserve-type-hints-in-literals.patch