gpt4 book ai didi

reflection - clojure.lang.Reflector 在互操作方法的实现中是如何使用的

转载 作者:行者123 更新时间:2023-12-03 16:49:40 26 4
gpt4 key购买 nike

当我们跑

(.someMethod obj arg1 arg2 arg3)

clojure.lang.Reflector 类是否一直在使用,这对性能有何影响?

最佳答案

这取决于编译器是否可以静态确定哪个类或接口(interface)someMethod属于。

如果可以,那么它将发出直接调用和c.l.Reflector不会在运行时使用。结果等价于

((Foo) obj).someMethod(arg1, arg2, arg3);

在 Java 中,假设 someMethod已由类/接口(interface)声明 Foo .

如果不能,那么它将发出对静态方法 clojure.lang.Reflector.invokeInstanceMethod 的调用。 .在 Clojure 表示法中,发出的调用可以写成
(clojure.lang.Reflector/invokeInstanceMethod
obj "someMethod" (object-array [arg1 arg2 arg3]))

这通过在运行时使用反射来查找匹配方法。相对于静态解决调用的减速是相当惊人的。

关于reflection - clojure.lang.Reflector 在互操作方法的实现中是如何使用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20877053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com