在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ 為什么該行代碼中無(wú)法在下屆通配符中存入父類(lèi)?

為什么該行代碼中無(wú)法在下屆通配符中存入父類(lèi)?

The method add(capture#2-of ? super Integer) in the type List<capture#2-of ? super Integer> is not applicable for the arguments (Number)
    public static void down(List<? super Integer> numberList) {
        Number x = 4;
        numberList.add(x);
    }

add方法報(bào)錯(cuò)

回答
編輯回答
冷眸

對(duì)于泛型,要求的是泛型參數(shù)一旦被確定就不能改變。<? super Integer> 表示泛型參數(shù)將是 Integer 或者其父類(lèi),所以你肯定可以用 <? super Integer> 來(lái)消費(fèi) Integer 或者其子類(lèi)的對(duì)象。
NumberInteger 的父類(lèi) —— 我們假設(shè)繼承關(guān)系為 C 繼承 B,B 繼承 A,而 A、B、C又各自實(shí)現(xiàn)了某些接口,那么對(duì)于 <? super C> 的泛型參數(shù)在運(yùn)行時(shí)有許多可能的選擇 —— 并且在你的代碼這里(即將 List<? super C> 作為參數(shù)),編譯期是肯定無(wú)法確定這個(gè)泛型參數(shù)的。所以,編譯器干脆直接禁止你添加 C 的父類(lèi)到泛型容器。

2018年6月19日 04:44