我正在尝试在方法的主要代码之前和之后放置一些代码,但我不知道如何通用?
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()
。但它还在重复,有谁知道如何尽可能多地制作仿制药?
答案 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[] { });
}
}
}
但您可能需要对方法名称进行额外检查,以便正确调用它。