是否可以在运行时修改抽象方法的返回值?
例如:
public abstract class Task {
public abstract boolean validate();
public void setValidate(boolean b) {
/* modify the return value of 'validate' method */
}
}
答案 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;
}
}