加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:55:16 所属栏目:Java 来源:网络整理
导读:使用multimethods,我们可以向现有的 Java类添加方法.我的问题是,是否有可能重新定义一种特定方法,以及如何从Clojure代码中重新定义.例如,如果您有以下课程, public class Shape { public void draw() { ... }} 我希望能够运行一些东西来添加一个before方法,
使用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来完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读