看板 java 關於我們 聯絡資訊
import java.util.*; public class ArrayListDemo { public static void main(String[] args) { List lists = new LinkedList(); lists.add("abc"); lists.add(new Integer(3)); lists.add("def"); lists.add(new Integer(3)); System.out.println(lists); Iterator it = lists.iterator(); while(it.hasNext()) { if(it.next() instanceof String) { String str = (String)it.next(); System.out.println(str); } else if(it.next() instanceof Integer) { Integer integer = (Integer)it.next(); System.out.println(integer); } //System.out.println(it.next() instanceof String); //System.out.println(it.next() instanceof Integer); } } } 請問在未用泛型時,利用Iterator照順序取出List內的物件 要使用該物件的功能時必須自己轉型回物件原本的型態 那我用instanceof來一一檢查該物件是否為某個型態再轉型 可是執行時會出現ClassCastException 因為這個範例只有String和Integer物件,我也一一檢查了 請問為什麼在轉型時還是失敗了呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.52.188
tkcn:先在 API 看清楚 next() 的說明吧 07/02 22:07
※ 編輯: jtorngl 來自: 124.8.52.188 (07/02 22:19)
jtorngl:在While內我先 Object obj = it.next(); 07/02 22:24
jtorngl:然後後面的it.next()全改成obj,所以是我亂用it.next() ? 07/02 22:26
jtorngl:next()會回傳一個E type的element,這裡的E指的是Object吧 07/02 22:50
slalala:光字面上的意義 就可以了解那是會往下跳一個element了 07/02 23:25
slalala:it.haseNext回傳boolean 你可試試看while(true)能看到什麼 07/02 23:27
lth5:因為你比對的和轉型的是不同的物件 07/02 23:51
svenlee:每it.next() 就會跳到下一個object,你多呼叫太多次 07/03 16:16