是否有可能从Clojure重新定义Java方法?

前端之家收集整理的这篇文章主要介绍了是否有可能从Clojure重新定义Java方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用multimethods,我们可以向现有的 Java添加方法.我的问题是,是否有可能重新定义一种特定方法,以及如何从Clojure代码中重新定义.例如,如果您有以下课程,
public class Shape {
    public void draw() {
        ...
    }
}

我希望能够运行一些东西来添加一个before方法,比如:

(attach-to-method Shape/draw :before
    (println "... about to draw a shape"))

在评估该表单后,所有后续的绘制调用将在执行调用之前开始打印字符串.

我之前/之后/周围,类似AOP的行为的附件的目的是,可以动态地更改在现有实例上调用方法的框架并开始运行新附加的代码.目前我正在使用AspectJ,但我已经到了使用不同的编译器不是一个选项,我很想知道我是否可以放弃AspectJ.

解决方法

简答:不.

与在Java中一样,修改类的唯一方法是扩展(子类)它.您可以扩展Shape并覆盖draw方法(假设draw未声明为final).在Clojure中,这可以通过代理或gen-class来完成.

猜你在找的Java相关文章