代码之家  ›  专栏  ›  技术社区  ›  Edgar Gonçalves

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

  •  6
  • Edgar Gonçalves  · 技术社区  · 15 年前

    使用多方法,我们可以向现有Java类添加方法。我的问题是是否可以从Clojure代码中重新定义一个特定的方法以及如何重新定义。例如,如果您有以下类,

    public class Shape {
        public void draw() {
            ...
        }
    }
    

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

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

    在对该表单进行评估之后,对draw的所有后续调用都将在执行调用之前开始打印字符串。

    我的目标是在现有实例上动态更改调用该方法的框架,并开始运行新附加的代码。目前我正在使用AspectJ来实现这一点,但我已经到了一个地步,使用不同的编译器不是一个选项,我很想知道我是否可以抛弃AspectJ。

    2 回复  |  直到 15 年前
        1
  •  8
  •   Stuart Sierra    15 年前

    简短回答:没有。

    与Java一样,修改类的唯一方法是扩展(子类)它。您可以扩展 Shape 并覆盖 draw 方法(假设 未申报 final )在Clojure,这可以通过 proxy gen-class .

        2
  •  3
  •   Brian    15 年前

    如果你不能在爪哇做这件事,你就不能用Culjule来做。

    推荐文章