Действительно ли возможно переопределить методы Java от Clojure?

Используя мультиметоды мы можем добавить методы к существующим классам Java. Мой вопрос состоит в том, возможно ли переопределить один определенный метод, и как, от Clojure кодируют. Например, если у Вас есть следующий класс,

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

Я хотел бы смочь выполнить что-то для добавления перед методом, таким как это:

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

И после оценки той формы, все последующие вызовы для рисования начали бы печатать строку прежде, чем выполнить сам вызов.

Моя цель с этим вложением приблизительно, подобное AOP поведение, состоит в том, что платформа, называя тот метод на существующем экземпляре может быть динамично изменена и начать выполнять недавно присоединенный код. В настоящее время я использую AspectJ для этого, но я добираюсь до точки, где использование другого компилятора не является опцией, и мне любопытно знать, могу ли я просто канава AspectJ.

8
задан Edgar 8 August 2010 в 16:46
поделиться

2 ответа

Короткий ответ: Нет.

Как и в Java, единственный способ изменить класс - это расширить (подкласс) его. Вы можете расширить Shape и переопределить метод draw (при условии, что draw не объявлен final). В Clojure это можно сделать с помощью proxy или gen-class.

10
ответ дан 5 December 2019 в 12:54
поделиться

Если вы не можете сделать это на Java, вы не сможете сделать это в Clojure.

3
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: