最小示例,使用 1.9.0-alpha11
`
user=> (set! warn-on-reflection true)
true
user=> (defn foo ^String [^long x] "")
'user/foo
user=> (.length (foo 10))
反射警告,(...) - 无法解析 java.lang.Object 的 length 字段。
0
`
仅在禁用直接链接时出现此警告。
说明
这是CLJ-1533的另一表现。由于编译器通过 invokePrim 路由调用时执行的词法转换,因此丢失了 arglists 类型提示。启用直接链接时不会出现此问题,因为 invokeStatic 不是通过词法转换编译的,而是通过 StaticInvokeExpr 编译的,它可以正确跟踪原始 var 的类型提示。
补丁: 0001-CLJ-2005-assoc-arglist-ret-tag-as-tag-in-constructed.patch