1 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以使用代表超類的類型變量:
@SuppressWarnings("unchecked")
public static <S extends BaseClass, C extends S> Predicate<C> getConstraints(Class<C> clazz) {
if (clazz == BaseClass.class) {
return (Predicate<C>) constraints.getOrDefault(BaseClass.class, x -> true);
}
Class<S> superClass = (Class<S>) clazz.getSuperclass();
Predicate<C> p1 = (Predicate<C>) constraints.getOrDefault(clazz, x -> true);
Predicate<S> p2 = getConstraints(superClass);
return p1.and(p2);
}
您還必須轉(zhuǎn)換 的結(jié)果getOrDefault,因?yàn)閷?放入Predicate地圖“忘記”了類型信息,并且您會(huì)返回一個(gè)Predicate<? extends BaseClass>不能直接使用的泛型。
添加回答
舉報(bào)