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

鍍金池/ 問答/Java/ 請教一個java泛型的問題

請教一個java泛型的問題

有如下代碼:
方法test參數(shù)是需要C類,但是因為B類繼承C,所以我傳B是OK的。

public class A {

    public static void main(String[] args){
        B b = new B();
        test(b);
    }

    private static void test(C c){

    }

}

class B extends C{

}

class C{

}

但是如下代碼卻不行,不理解?

import java.util.ArrayList;
import java.util.List;

public class A {

    public static void main(String[] args){
        List<B> b = new ArrayList<>();
        test(b);
    }

    private static void test(List<C> c){

    }

}

class B extends C{

}

class C{

}

這時候會報錯:

test
(java.util.List<com.test.Extends.C>)
in A?cannot be applied
to
(java.util.List<com.test.Extends.B>)
?

實在不理解,請大家指教。
如果我就要傳集合,有什么辦法嗎?

回答
編輯回答
維他命

你爸爸的財產(chǎn)你可以繼承,你爸爸的公司的財產(chǎn)不能被你的公司繼承,也就不存在多態(tài)性了。

2017年8月19日 10:10
編輯回答
獨特范

參數(shù)修改為

 private static void test(List<? extends C> c){

 }

解決你的問題。

為什么直接類可以:

這是普通的繼承關(guān)系,自然沒問題

為什么集合不可以:

這是類型轉(zhuǎn)換,是兩碼事。

2018年9月5日 13:56
編輯回答
萌小萌

基礎(chǔ)的知識層主Java泛型,還是需要多看看書Java編程思想等,一句話:泛型是不具有繼承性的,Java類的多態(tài)性不能強(qiáng)行安插到泛型上。

2017年12月15日 21:33
編輯回答
陪妳哭

繼承和類型轉(zhuǎn)換是兩碼事,應(yīng)該這樣聲明:、
private static void test(List<? extends C> c) { }

2017年11月3日 02:09
編輯回答
念舊

這種情況下應(yīng)該這樣聲明:

private static void test(List<? extends C> c) { }

關(guān)于這個你可以參考一下這篇知乎回答

2018年6月12日 03:54