如何在方法主代码之前和之后自动调用一些代码?

时间:2014-11-13 16:55:21

标签: java

我正在尝试在方法的主要代码之前和之后放置一些代码,但我不知道如何通用?

public class A extends Subject {
    private int attribute1;
    private int attribute2;

    public A (int attribute1, int attribute2) {
        super();
        this.attribute1 = attribute1;
        this.attribute2 = attribute2;
    }

    public A copy(){...}

    public void setAttribute1(int attribute1) {
        A childBefore = this.copy(); // want it to be generic
        this.attribute1 = attribute1;
        this.notify(childBefore, this); // want it to be generic
    }

    public void setAttribute2(int attribute2) {
        A childBefore = this.copy(); // want it to be generic
        this.attribute2 = attribute2;
        this.notify(childBefore, this); // want it to be generic
    }
}

所以基本上,我不希望在每个需要的方法中定义the initialization and the notify part。我找到了一个可能的解决方案,其中包括在父类中定义它并调用Child childBefore = super.before()super.after()。但它还在重复,有谁知道如何尽可能多地制作仿制药?

2 个答案:

答案 0 :(得分:0)

class Base
{
public void foo()
{
    doStuff();
}
public void doStuff()
{
    print("base");
}
}

类Derived扩展Base     {         @覆盖         public void doStuff()         {             打印( “源自”);         }     }

new Derived().foo(); // Prints "derived".

显然,所有Derived的方法都必须已经在Base中定义,但是否则(没有内省)这样做在逻辑上是不可能的。

答案 1 :(得分:0)

要反思地做,你必须做类似

的事情
public static void main(String[] args) {
    Child child = new Child(0, 0);
    Class<Child> childClass = child.getClass();
    for (Method method : childClass.getDeclaredMethods()) {
        if (method.getName().startsWith("set")) {
            method.invoke(child, new Object[] { });
        }
    }
}

但您可能需要对方法名称进行额外检查,以便正确调用它。