在程序中我們常會(huì)使用List存儲(chǔ)類型來保存某一系列的數(shù)據(jù),如字符串,對(duì)象等,當(dāng)然,在存儲(chǔ)時(shí)沒問題,直接往里放即OK了,但在取出來用的時(shí)候,就要注意了,我們一般是用一個(gè)For循環(huán)來一一取出我們所需的對(duì)象數(shù)據(jù),如:
for (Iterator it = Items.iterator(); it.hasNext();) {...ItemObject subject = (ItemObject ) it.next()---(1);System.out.println(subject.getId()---(2);)...}
即用List的iterator()迭代方法,取出對(duì)象,然后進(jìn)行強(qiáng)制轉(zhuǎn)換,轉(zhuǎn)換為我們當(dāng)時(shí)保存的對(duì)象類型,但這當(dāng)Items對(duì)象不為空,且有數(shù)據(jù)內(nèi)容時(shí),這樣使用是沒問題的,如果Items對(duì)象為空,或Items對(duì)象不為空,但數(shù)據(jù)內(nèi)容0(即沒有存儲(chǔ)相應(yīng)的數(shù)據(jù)對(duì)象)時(shí),這樣直接用FOR循環(huán)是會(huì)報(bào)錯(cuò)的,通常會(huì)報(bào):java.util.NoSuchElementException這樣的異常,意思即沒有相應(yīng)的對(duì)象項(xiàng),因?yàn)楫?dāng)我們?nèi)〕隽四骋粭l數(shù)據(jù)后,進(jìn)行了強(qiáng)制轉(zhuǎn)換,但取出的數(shù)據(jù)并不是我們強(qiáng)制轉(zhuǎn)換的對(duì)象類型,所以當(dāng)然會(huì)報(bào)這樣的異常的.
其實(shí)在上面舉的代碼例子中,(1)這一步并不會(huì)報(bào)錯(cuò)的,報(bào)錯(cuò)其實(shí)是由(2)這一步引起的,因?yàn)閟ubject并不是ItemObject 對(duì)象類型,但還要調(diào)用它的方法,所以肯定就會(huì)報(bào)錯(cuò)的.\
所以一般在使用List的iterator()的方法時(shí),最好在代碼前加一句判斷: if ( Items != null && Items.size()>0 ) {.........} ,這樣就可以盡情的使用,而不會(huì)報(bào)錯(cuò)了.