【问题标题】:Java Generics: Incompatible types when using an iteratorJava 泛型:使用迭代器时不兼容的类型
【发布时间】:2020-05-20 09:57:49
【问题描述】:

我正在为我的通用 MinPriorityQueue 实现编写一个测试类。

我尝试以两种方式遍历队列(即选项 1 和 2)。选项 1 有效。选项 2 会引发错误。

选项 1

Iterator<Integer> it = q.iterator();
while(it.hasNext())
      System.out.print(it.next() + " ");

选项 2

for(Integer i : q)
      System.out.print(i + " ");

问题:为什么选项 2 会出现以下错误(以及如何解决)?

main.java:17:错误:不兼容的类型:对象无法转换为整数 for(整数 i : q)

Screenshot of class main

Screenshot of class MinPriorityQueue

Screenshot of abstract class PriorityQueue

编辑 1:添加了类的屏幕截图

【问题讨论】:

  • q的类型是什么?
  • 请添加你的类实现...否则很难帮助你。
  • 您应该将您的代码发布为文本,而不是屏幕截图。此外,您应该展示MinPriorityQueue 的实现。我的猜测是q.iterator 返回一个原始的Iterator
  • MinPriorityQueue
  • 请将您的代码发布为 text

标签: java generics types iterator


【解决方案1】:

您的MinPriorityQueue 有一个原始超类:

... extends PriorityQueue

因此,从该类继承的方法(例如 iterator())也将是原始的。

使超类成为非原始的:

... extends PriorityQueue<E>

【讨论】:

    【解决方案2】:

    很可能您的 MinPriorityQueue 实现没有实现 Iterable&lt;?&gt; 接口,只有在这种情况下,您才能像在选项 2 中尝试那样在循环中使用它。

    【讨论】:

    • 应该是因为它继承自类 PriorityQueue。我还是尝试了你的建议,但没有解决问题。
    • 请注意,您需要像这样继承类型化的 PriorityQueue:MinPriorityQueue extends PriorityQueue。最后一个 很重要。
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多