集合隐式转换的Scala型方差

时间:2016-03-18 12:10:07

标签: java scala

为什么这不起作用?

implicit class ImplicitHelper[T <: IndexedSeq[String]](i: T) = {
    def bar() = ???
}

val foo: Array[String] = ???
foo.bar // no implicit conversion …

在Scala统一集合层次结构中没有Array 实现? IndexedSeq?

更新:正如一些用户指出的那样,虚线表示的不是实现,而是隐式转换。因此,正确的方法是使用视图边界而不是下面每个答案的类型边界

enter image description here

2 个答案:

答案 0 :(得分:2)

非连续线表示视图,而不是直接层次结构:

final class Array[T](_length: Int) extends java.io.Serializable with java.lang.Cloneable

如您所见,数组不会扩展IndexedSeq。这些观点代表implicit conversions

enter image description here

所以唯一的意思就是从IndexedSeq转换为Array

答案 1 :(得分:1)

查看绑定的作品:

implicit class ImplicitHelper[T <% IndexedSeq[String]](i: T) {
    def bar() = ???
}
相关问题