1

在 Clojure 中使用 gen-class 创建子类时,您可以通过暴露方法公开受保护的虚拟(非最终)方法,但是它是通过覆盖实现的,这对非虚拟(最终)方法不起作用。

是通过反射以这种方式调用受保护方法的唯一方法吗?

reify 或 proxy 能比 gen-class 做得更好吗?

4

1 回答 1

1

这原来是 clojure-clr 中的一个错误。它可能在 JVM 版本中运行良好。如果非虚拟/最终方法是受保护的/公共的,Clojure 确实允许调用它们。但是,我试图调用的方法是受保护的内部,这实际上意味着受保护内部。clojure-clr 错误地将其解释为受保护的内部的,内部含义只能在同一程序集中访问。因此,我的方法调用失败了。

这已在最新版本的 clojure-clr 中得到修复。

于 2013-03-15T15:38:48.793 回答