本篇內(nèi)容介紹了“java泛型容器Collection如何用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
保德網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
先簡(jiǎn)單來段例子:
public void testGenerics() {
Collection numbers = new ArrayList<>();
numbers.add(1); // ok
numbers.add(0.1); // ok
Collection extends Number> numbers2 = new ArrayList<>();
// don't work, you don't know which subtype 'numbers2' exactly contains
numbers2.add(1); // oops!
}
這個(gè)例子其實(shí)有點(diǎn)反人類,估計(jì)大部分人(包括我)對(duì)這種轉(zhuǎn)換的第一反應(yīng)肯定是“當(dāng)然是對(duì)的”(這就掉坑了),說下我的理解:
Collection
Collection extends Number>:表示這個(gè)Collection是Number類型的“某個(gè)子類型”的Collection實(shí)例,可以是Collection
Collection
再來個(gè)例子:
public void testGenerics() {
Collection numbers = new ArrayList<>();
Collection integers = new ArrayList<>();
Collection extends Number> numbers2 = new ArrayList<>();
numbers2 = integers; // ok
numbers2 = numbers; // ok
// don't work, Collection != Collection
numbers = integers; // oops!
}
Integer明明繼承了Number,那為什么
Collection
不成立呢,我們?cè)賮砜磦€(gè)例子:
public void testGenerics() {
Collection profits = new ArrayList<>();
insertSomething(profits); // line 1
Integer profit = profits.iterator().next(); // oops! crash
}
private void insertSomething(Collection numbers) {
numbers.add(Long.MAX_VALUE);
}
如果line 1成立,那么接下去獲取利潤(rùn)將會(huì)得到個(gè)負(fù)數(shù),后續(xù)的一系列計(jì)算都會(huì)發(fā)聲異常,如果代碼不夠健壯甚至可能會(huì)拋出一些意料之外的RuntimeException,導(dǎo)致方法不正常結(jié)束甚至程序crash。
所以一句話,Collection
現(xiàn)在再來說說Collection
public void testGenerics2() {
Collection integers = new ArrayList<>();
Collection> objects2 = integers; // ok
// don't work, which type of 'objects2' contains is uncertain
objects2.add(1); // oops!
Collection objects = integers; // oops!
}
Collection>表示的范圍比Collection
無(wú)法調(diào)用objects2.add(1)是因?yàn)榫幾g器無(wú)法精確推斷objects2到底是哪種數(shù)據(jù)類型的容器,可能會(huì)產(chǎn)生運(yùn)行時(shí)的類型轉(zhuǎn)換異常;
表示任意數(shù)據(jù)類型集合的正確寫法是Collection>;
Collection
為什么Collection
public void testGenerics() {
Collection integers = new ArrayList<>();
Collection objects = integers; // oops!
// don't work, which type of 'objects2' contains is uncertain
objects.add("1");
Integer one = objects.iterator().next(); // oops! crash
}
Collection
Collection>不能往容器放數(shù)據(jù),因?yàn)? (UnknownType)是未知類型,無(wú)法判斷obj instanceof UnknownType的結(jié)果;
?是表示未知類型,Object表示的是已知類型;
如果Collection
“java泛型容器Collection如何用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!