2012-08-14 62 views
0
private ArrayList<HashSet<Integer>> sets = new ArrayList<HashSet<Integer>>(); 

      Iterator i = this.sets.iterator(); 
      while (i.hasNext()){ 

       if(i.next().containsAll(union)){ 
        return true; 
       } 
      } 

我得到它asssumes的.next()以下異常得到Object類型迭代器應該返回HashSet的,但作爲對象

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from Object to HashSet<Integer> 
    The method containsAll(HashSet<Integer>) is undefined for the type Object 

的對象雖然我得到的對象哈希集合

 while (i.hasNext()){ 
      System.out.println(i.next().getClass().getName()); 
     } 

打印

java.util.HashSet 
java.util.HashSet 
java.util.HashSet 

去什麼在?上?

+0

getName()方法將返回類的名稱。這裏的類名是java.util.HashSet – Achilles 2012-08-14 04:52:49

回答

4

確保您的迭代器也可作爲類型的HashSet

Iterator<HashSet<Integer>> i = this.sets.iterator(); 
+0

好吧,你已經快了5秒,刪除了我的答案。 – home 2012-08-14 04:44:57

+0

@home:是的,你仍然可以回答。不需要刪除。 – kosa 2012-08-14 04:49:35

+0

謝謝大家,它的工作,我是新來的Java,我真的不明白,怪異的嵌套類型轉換,你可以推薦什麼看? – 2012-08-14 04:50:51

2

相當容易,更換

Iterator i = this.sets.iterator(); 

Iterator<HashSet<Integer>> i = this.sets.iterator(); 
0

你需要顯式轉換,或使它通用

private ArrayList<HashSet<Integer>> sets = new ArrayList<HashSet<Integer>>(); 

      Iterator<HashSet<Integer>> i = this.sets.iterator(); 
      while (i.hasNext()){ 

       if(i.next().containsAll(union)){ 
        return true; 
       } 
      } 
0

我覺得你還需要定義迭代器在

Iterator<HashSet<Integer>> i = sets.iterator(); 

那麼它應該能夠將其自動轉換爲HashSet的。否則,你將需要做明確的鑄造

if(((HashSet<Integer>)i.next()).containsAll(union)){ 
       //return true; 
      } 
+0

我不知道有關明確的鑄造,非常感謝 – 2012-08-14 04:59:09