在运行时修改抽象方法的返回值

时间:2012-10-08 16:50:38

标签: java abstract

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

例如:

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

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

2 个答案:

答案 0 :(得分:2)

为什么不在boolean中设置Task字段,让validate返回该字段的值,并setValidate更改该值?

public abstract class Task {
  private boolean isValid;
  public boolean validate() { return isValid; }
  public void setValidate(boolean b) { isValid = b; }
}

答案 1 :(得分: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;
    }
}