2014-11-06 52 views
0

我的代碼在運行時失敗,出現ClassCastException。我試圖調試,但徒勞無功。我已經聲明瞭一個帶有字段的類主題,並且正試圖將該類的對象加載到列表中。以下是代碼。它失敗了:List items = (List)(it.next())。爲泛型添加?並沒有幫助。我猜這個對象是被施放的,儘管在List聲明中沒有提到泛型。有沒有我在這裏失蹤的基本概念?嘗試遍歷列表時拋出Java ClassCastException

在下面的方法中,我試圖將數據編碼到一個xml文件中。

private void encodeSection(PrintStream output, Indenter indenter, 
            String name, List list) { 
      String indent = indenter.makeString(); 

      output.println(indent + "<" + name + "s>"); 

      indenter.in(); 
      String indentNext = indenter.makeString(); 

      if (list == null) { 
       // the match is any 
       output.println(indentNext + "<Any" + name + "/>"); 
      } else { 
       String nextIndent = indenter.makeString(); 

       Iterator it = list.iterator(); 
       indenter.in(); 

       while (it.hasNext()) { 
        List items = (List)(it.next());//-------------> Error occurs 
        output.println(indentNext + "<" + name + ">"); 

        Iterator matchIterator = items.iterator(); 
        while (matchIterator.hasNext()) { 
         TargetMatch tm = (TargetMatch)(matchIterator.next()); 
         tm.encode(output, indenter); 
        } 

        output.println(indentNext + "</" + name + ">"); 
       } 

       indenter.out(); 
      } 

      indenter.out(); 
      output.println(indent + "</" + name + "s>"); 
     } 

    } 

堆棧跟蹤:

Exception in thread "main" java.lang.ClassCastException: SubjectID_V cannot be cast to java.util.List 
    at Target_V.encodeSection(Target_V.java:71) 
    at Target_V.encode(Target_V.java:41) 
at com.sun.xacml.AbstractPolicy.encodeCommonElements(Unknown Source) 
    at com.sun.xacml.PolicySet.encode(Unknown Source) 
    at PolicyFactory_V.main(PolicyFactory_V.java:56) 
+0

您尚未發佈整個代碼。此外,你的錯誤很可能是因爲你試圖將一種類型的集合投射到其他類型,這可能是不允許的。什麼是你的'SubjectID_V'的類型? – ha9u63ar 2014-11-06 10:52:53

+0

您在這裏使用了很多「原始類型」。請查看泛型類型,以及如何在'List'和'Iterator'中使用它們。 – Tom 2014-11-06 10:54:30

回答

2

List items = (List)(it.next())如果List你迭代包含(的實現List接口的類的實例,即)List類型的只是元素纔有效。

根據您得到的錯誤,您試圖將SubjectID_V類型的實例投射到List。您應該查看初始化該列表的代碼。你的錯誤可能在那裏。

使用泛型列表可能會幫助您避免此異常,因爲它會阻止代碼首先傳遞編譯。

+0

感謝您的回覆! – Lucky 2014-11-13 09:15:52