类型迭代器[A]的表达式不符合预期的类型迭代器[A]

时间:2015-08-26 19:10:54

标签: scala intellij-idea tree iterator iterable

我是scala的初学者,我有一个非常简单的代码来实现一个树。我想让它变为Iterable,这样我就可以使用迭代器遍历这个树中的每个元素。不幸的是,IntelliJ显示错误。

  

类型迭代器[A]的表达式不符合预期的类型迭代器[A]

其中指的是Node类中的迭代器方法。 在我的代码下面:

abstract class MyTreeItem[A] extends Iterable

case class EmptyLeaf[A]() extends MyTreeItem[A] {
  override def iterator: Iterator[A] = Iterator.empty
}

case class Node[A](left: MyTreeItem[A], right: MyTreeItem[A], item: A) extends MyTreeItem[A] {
  *override def iterator: Iterator[A] = Iterator.single(item) ++ left.iterator ++ right.iterator*
}

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

您需要在实施Iterable时添加通用参数:

abstract class MyTreeItem[A] extends Iterable[A]

如果没有它,MyTreeItem[A]的类型为Iterable[Any],并且在最后一行连接迭代器的同时也是Iterable[Any],这当然不能分配给Iterable[A]