迭代器应该返回HashSet但作为Object

时间:2012-08-14 04:41:19

标签: java iterator hashset

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

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

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

我得到以下异常,因为它解析.next()获取Object

类型的对象
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

我得到对象Hash set

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

打印

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

发生了什么事?

4 个答案:

答案 0 :(得分:3)

确保您的Iterator也是HashSet

的类型
Iterator<HashSet<Integer>> i = this.sets.iterator();

答案 1 :(得分:1)

相当容易,替换

Iterator i = this.sets.iterator();

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

答案 2 :(得分: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;
                }
            }

答案 3 :(得分:0)

我认为您还需要在

中定义迭代器
 Iterator<HashSet<Integer>> i = sets.iterator();

然后它应该能够自动将其强制转换为HashSet。否则你需要进行显式投射

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