类型提示可以在多次反射发生的执行时间上有很大的改进.我对类型提示的理解是它只允许编译器缓存反射查找.缓存可以动态发生吗?或者有什么理由这是不好/不可能的?
来自编程Clojure:
这些警告表明Clojure无法知道c的类型.您可以使用元数据语法提供类型提示来解决此问题
^Class:
(defn describe-class [#^Class c]
{:name (.getName c)
:final (java.lang.reflect.Modifier/isFinal (.getModifiers c))})
Run Code Online (Sandbox Code Playgroud)
在类型提示到位后,反射警告将消失.编译的Clojure代码与编译的Java代码完全相同.此外,尝试使用Class以外的类调用describe-class将失败并出现ClassCastException.
总而言之,反射演员不仅仅是缓存而已被淘汰.
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |