很抱歉将错误直接作为标题,但我找不到更好的标题。
我有一个定义如下的接口,用作我所有验证器类的蓝图:
public interface Validator<T> {
public boolean validate(T item);
}
然后我有一些可以实现它的类,假设其中之一是这样的:
public class EmptyStringValidator implements Validator<String> {
private final String _errorMessage;
public EmptyStringValidator() {
this("String cannot be empty.");
}
public EmptyStringValidator(String message) {
this._errorMessage = message;
}
@Override
public String getMessage() {
return this._errorMessage;
}
@Override
public boolean validate(String item) {
return gsi.application.core.Validation.isEmptyString(item);
}
}
我想把它全部放在一个数组中,然后在一个循环中调用它。所以这是我正在使用的代码:
public List<Validator<? extends Object>> validators;
public FormItem<T> addValidator(Validator<? extends Object> validator) {
this.validators.add(validator);
return this;
}
public boolean validate() {
for (Validator<? extends Object> validator : this.validators)
if (!validator.validate(this.getInputValue())) {
this._errorMessage = validator.getMessage();
return false;
}
return true;
}
但是,该代码在函数中给出了错误validate()
,特别是在这部分:
validator.validate(this.getInputValue())
它给了我我提到的错误
The method validate(capture#2-of ? extends Object) in the type Validator<capture#2-of ? extends Object> is not applicable for the arguments (String)
我的理解是没有意义的。据我了解<? extends Object>
,应该接受从 Object 类派生的任何东西,对吗?
谁能指出我做错了什么或指出我正确的方向?谢谢。