1

是否可以在运行时修改抽象方法的返回值?

例如:

public abstract class Task {
    public abstract boolean validate();

    public void setValidate(boolean b) {
        /* modify the return value of 'validate' method */
    }
}
4

2 回答 2

2

为什么不只是有一个boolean字段Taskvalidate返回该字段的值,并setValidate更改该值?

public abstract class Task {
  private boolean isValid;
  public boolean validate() { return isValid; }
  public void setValidate(boolean b) { isValid = b; }
}
于 2012-10-08T16:51:20.127 回答
0

唉,如果你能(很容易,无论如何)。但是,如果您可以修改抽象类和子类,则有一种解决方法。让子类protected改为实现一个方法,然后让你的方法在验证之前validate()检查值。validate您可能还应该创建validate()一个最终方法,就像我在示例中所做的那样,以便子类无法将其更改为检查变量。当然,这取决于你。

这是解决方法的代码:

public abstract class Task {

    private boolean validate = true;

    public final boolean validate() {
        // Assumes that no validation means validation always passes
        return validate ? validateImpl() : true;
    }

    protected abstract boolean validateImpl();

    public void setValidate(boolean validate) {
        this.validate = validate;
    }
}
于 2012-10-08T17:47:20.027 回答