Я пытаюсь создать составной валидатор для набора API. Общий интерфейс: < /p>
Код: Выделить всё
public interface APIValidator {
boolean validate(Input i, Context c);
}
< /code>
Например, если есть 2 API: отправить и принять, у меня есть интерфейсы «маркер»: < /p>
public interface SendAPIValidator implements APIValidator {
boolean validate(SendInput i, SendContext c);
}
public interface AcceptAPIValidator implements APIValidator {
boolean validate(AcceptInput i, AcceptContext c);
}
< /code>
И они, соответственно, имеют реализации.class Validators {
public static APIValidator composite(Set validators) {
return (input, context) -> {
return validators.stream()
.allMatch(validator -> validator.validate(input, context));
}
}
< /code>
Тем не менее, попытка ввести это в провайдер или что-то не работает: < /p>
SendAPIValidator provideCompositeValidator(Set validators) {
// Error: no instance(s) of type variable(s) C, I exist so that SendAPIValidator conforms to APIValidator
return Validators.compositeValidator(validators);
}
< /code>
Это из -за инвариантов типа Java (я забыл технический термин)? Я знаю, что это можно сделать, если я прохожу в Apivalidator Подробнее здесь: https://stackoverflow.com/questions/797 ... or-in-java