有如下代碼:方法test參數(shù)是需要C類,但是因?yàn)锽類繼承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{
}
這時(shí)候會報(bào)錯(cuò):
test
(java.util.List<com.test.Extends.C>)
in A?cannot be applied
to
(java.util.List<com.test.Extends.B>)
?
實(shí)在不理解,請大家指教。如果我就要傳集合,有什么辦法嗎?
5 回答

繁星coding
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
參數(shù)修改為
private static void test(List<? extends C> c){
}
解決你的問題。
為什么直接類可以:
這是普通的繼承關(guān)系,自然沒問題
為什么集合不可以:
這是類型轉(zhuǎn)換,是兩碼事。

茅侃侃
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
基礎(chǔ)的知識層主Java泛型,還是需要多看看書Java編程思想等,一句話:泛型是不具有繼承性的,Java類的多態(tài)性不能強(qiáng)行安插到泛型上。

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
你爸爸的財(cái)產(chǎn)你可以繼承,你爸爸的公司的財(cái)產(chǎn)不能被你的公司繼承,也就不存在多態(tài)性了。

鳳凰求蠱
TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
繼承和類型轉(zhuǎn)換是兩碼事,應(yīng)該這樣聲明:、
private static void test(List<? extends C> c) { }
添加回答
舉報(bào)
0/150
提交
取消