.asInstanceOf[Foo[_ <: Bar]] 是什么意思?



我是Scala新手,在浏览一个示例Scala项目时遇到了这行代码。谁能给我解释一下下面粗体代码的目的:

struct.iterator().asInstanceOf[Iterator[_ <: Product2[Any, Any]]])

我知道我们正在为struct对象生成一个迭代器,但是这里的asInstanceOf函数的确切目的是什么,它与同一程序中其他地方的迭代器有什么不同?

struct.iterator()
struct.iterator().asInstanceOf[Iterator[_ <: Product2[Any, Any]]])

让我们一步一步来。

.asInstanceOf -它类似于java的强制转换操作符,它将类型更改为:

Iterator[type] -允许在元素序列上迭代的数据结构

_ <: Product2[Any, Any] -这里有点棘手。A <: B表示B必须是A的子类型

详情请浏览:http://docs.scala-lang.org/tutorials/tour/variances.html和http://blogs.atlassian.com/2013/01/covariance-and-contravariance-in-scala/

如果你想了解更多关于协方差和逆变性的知识,请查看Martin Odersky在coursera上的视频

最新更新