是否可以在运行时修改抽象方法的返回值?
例如:
public abstract class Task {
public abstract boolean validate();
public void setValidate(boolean b) {
/* modify the return value of 'validate' method */
}
}
为什么不只是有一个boolean
字段Task
,validate
返回该字段的值,并setValidate
更改该值?
public abstract class Task {
private boolean isValid;
public boolean validate() { return isValid; }
public void setValidate(boolean b) { isValid = b; }
}
唉,如果你能(很容易,无论如何)。但是,如果您可以修改抽象类和子类,则有一种解决方法。让子类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;
}
}