Я уже несколько часов бьюсь головой об это стол.
У меня есть эта карта:
private static Map<Class<? extends BaseClass>, Predicate<? extends BaseClass>> constraints;
И у меня есть этот метод:
public static <C extends BaseClass> Predicate<C> getConstraints(Class<? super C> clazz) {
if (clazz == BaseClass.class) {
return (Predicate<C>) constraints.getOrDefault(BaseClass.class, x -> true);
}
Class<? super C> superClass = clazz.getSuperclass();
return constraints.getOrDefault(clazz, x -> true).and(getConstraints(superClass));
}
Все, что предполагается сделать, - это связать все ограничения для определенного класса (и суперклассов) в Predicate<T>
, используя метод and()
.Обобщения кажутся мне логичными, но я все равно получаю сообщение об ошибке при выполнении рекурсивного вызова.getConstraints(Class<? super C>) cannot be applied to Class<capture of ? super E>
.Я не понимаю, потому что superClass
относится к типу Class<? super C>
, который является именно тем параметром, который принимает мой метод.Есть идеи?