本篇內(nèi)容介紹了“Java中 super T>和List extends T>的區(qū)別是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供膠州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為膠州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
下面通配符聲明List extends Number> foo3
的賦值式是合法的:
List extends Number> foo3 = new ArrayList(); // Number "extends" Number (in this context) List extends Number> foo3 = new ArrayList (); // Integer extends Number List extends Number> foo3 = new ArrayList (); // Double extends Number
讀- 上面給出可能的賦值式,你能確保從List foo3
讀取什么類型的對(duì)象?:
你可以讀取一個(gè)Number
,因?yàn)槿我獍粋€(gè)Number
或一個(gè)Number
子類的列表都可賦值于foo3
。
你不可讀取一個(gè)Integer
,因?yàn)?code>foo3可以指List
。
你不可讀取一個(gè)Double
,因?yàn)?code>foo3可以指List
。
寫- 上面給出可能的賦值式,你能添加什么類型的對(duì)象至List foo3
?:
你不能添加一個(gè)Integer
,因?yàn)?code>foo3可以指List
。
你不能添加一個(gè)Double
,因?yàn)?code>foo3可以指List
。
你不能添加一個(gè)Number
,因?yàn)?code>foo3可以指List
。
你不能將任何對(duì)象添加到List extends T>
是因?yàn)槟悴荒鼙WC它真正指向的是哪種類型的列表,因此,你不能保證某對(duì)象在該列表中是允許的。唯一的“確保”是你只能從中讀取,你會(huì)得到一個(gè)T或者T的子類。
下面通配符聲明List super Number> foo3
的賦值式是合法的:
List super Integer> foo3 = new ArrayList(); // Integer is a "superclass" of Integer (in this context) List super Integer> foo3 = new ArrayList (); // Number is a superclass of Integer List super Integer> foo3 = new ArrayList
讀- 上面給出可能的賦值式,你能確保從List foo3
讀取什么類型的對(duì)象?:
你不能確保讀取一個(gè)Integer
,因?yàn)?code>foo3可以指List
或List
。
你不能確保讀取一個(gè)Number
,因?yàn)?code>foo3可以指List
。
唯一能確定的是你能讀取一個(gè)Object
或Object
子類的對(duì)象(但是你不知道具體哪個(gè)子類)。
寫- 上面給出可能的賦值式,你能添加什么類型的對(duì)象至List foo3
?:
你可以添加一個(gè)Integer
或Integer
的子類。
你不能添加一個(gè)Number
,因?yàn)?code>foo3可以指List
。
你不能添加一個(gè)Object
,因?yàn)?code>foo3可以指List
。
記住PECS: "Producer Extends, Consumer Super"。
"Producer Extends"- 如果你需要一個(gè)List
來(lái)生產(chǎn)T
值(你想從列表讀取T
),你就用? extends T
來(lái)聲明它,如List extends Integer>
。但是你不能夠添加?xùn)|西到列表中。
"Consumer Super"- 如果你需要一個(gè)List
來(lái)消費(fèi)T
值(你想從列表寫入T
),你就用? super T
來(lái)聲明它,如List super Integer>
。但是你能從列表讀取什么類型對(duì)象是不能確定的。
如果你要列表讀寫兼顧,你就不要任何通配符聲明該列表,如List
。
我的助記
PECS-> PEteacher taught me computer science.
extends du, super xie -> edsx -> 惡毒的思想
public class Collections { public staticvoid copy(List super T> dest, List extends T> src) { for (int i = 0; i < src.size(); i++) dest.set(i, src.get(i)); } }
“Java中 super T>和List extends T>的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!