【问题标题】:How to use a custom class as a type variable for an Iterator?如何使用自定义类作为迭代器的类型变量?
【发布时间】:2011-02-15 18:53:14
【问题描述】:

我有以下使用泛型的代码:

设置 membersKeySet = membersList.keySet(); Iterator membersItr = membersKeySet.iterator(); 而(成员Itr.hasNext()){ DoubleKey dk = membersItr.next(); }

Eclipse 告诉我“Set 是一种原始类型。对泛型类型 的引用应该被参数化”。 DoubleKey 也是一个通用类。我的理解是 .iterator() 方法并不能确保 DoubleKey 类已使用相同的参数类型传递。我尝试了类型转换,但它不起作用。我怎样才能做到这一点?谢谢!

附:我仍然在使用泛型。

【问题讨论】:

    标签: java generics implementation


    【解决方案1】:

    如果存储在集合中的对象是DoubleKey<Integer, Integer>的实例,那么代码应该是这样的:

    Set<DoubleKey<Integer, Integer>> membersKeySet = membersList.keySet();
    Iterator<DoubleKey<Integer, Integer>> membersItr = membersKeySet.iterator();
    while(membersItr.hasNext()){
        DoubleKey<Integer, Integer> dk =  membersItr.next();
    }
    

    【讨论】:

    • 是的!我刚刚做完。哈哈。我没有意识到我没有在 Set 中指定类型变量。感谢 Stackoverflow 的人!
    【解决方案2】:

    您应该定义键集的类型。

    Set<DoubleKey> membersKeySet = membersList.keySet();
    

    能否请您提供memberList 定义以提供完整图片?

    【讨论】:

      【解决方案3】:

      嗯,取决于 membersList 是什么,我希望这是解决方案:

      Set<DoubleKey> membersKeySet = membersList.keySet();
      

      如果membersList也是使用原始类型声明的,它会变得更棘手......但是当你检查这是否是你所需要的一切时,我们会越过那座桥:)

      【讨论】:

        【解决方案4】:

        从您提供的代码来看,membersList 实际上是某种地图。因此,为了获得泛型的编译时类型安全,应该适当地定义 membersList,例如

        Map<DoubleKey, Object> membersList = new HashMap<DoubleKey, Object>();
        Set<DoubleKey> membersKeySet = membersList.keySet();
        

        这样,您的迭代器应该可以正常工作了。

        【讨论】:

          【解决方案5】:

          通常您会使用紧凑的 for 循环表示法:

          while(DoubleKey dk: membersList.keySet()) { }

          如果您到处使用DoubleKey&amp;lt;Integer, Integer&amp;gt;,请考虑将其单独设为一个类:

          IIKey 类扩展 DoubleKey {}

          【讨论】:

            猜你喜欢
            • 2012-03-16
            • 1970-01-01
            • 1970-01-01
            • 2021-09-05
            • 1970-01-01
            • 1970-01-01
            • 2020-09-27
            • 2013-02-25
            • 1970-01-01
            相关资源
            最近更新 更多