第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

遞歸方法中的泛型

遞歸方法中的泛型

拉風(fēng)的咖菲貓 2021-10-06 12:39:47
幾個(gè)小時(shí)以來,我一直在用頭撞桌子。我有這張地圖:private static Map<Class<? extends BaseClass>, Predicate<? extends BaseClass>> constraints;我有這個(gè)方法: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));}所有這些都應(yīng)該做的是在Predicate<T>usingand()方法中鏈接某個(gè)類(和超類)的所有約束。泛型對我來說似乎合乎邏輯,但在進(jìn)行遞歸調(diào)用時(shí)仍然出錯(cuò)。getConstraints(Class<? super C>) cannot be applied to Class<capture of ? super E>. 我不明白,因?yàn)閟uperClass它的類型Class<? super C>正是我的方法接受的參數(shù)。有任何想法嗎?
查看完整描述

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>不能直接使用的泛型。


查看完整回答
反對 回復(fù) 2021-10-06
  • 1 回答
  • 0 關(guān)注
  • 168 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)