Прошу прощения за то, что вы указали ошибку как заголовок, но я не смог найти лучшего заголовка.Метод validate (capture # 2-of? Extends Object) в типе Validator <capture # 2-of? extends Object> не применим для аргументов (String)
У меня есть интерфейс, определенный следующим образом для использования в качестве модели для всех моих классов валидаторов:
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, правильно?
Может ли кто-нибудь указать, что я делаю неправильно или указать мне в правильном направлении? Спасибо.
'? extends Object' Не имеет смысла. Для всех классов. –
Вот что я подумал, это должно быть верно для каждого класса, который я вложил, но кажется, что он не примет только любой класс. –
Каков тип this.getInputValue() – nitegazer2003