【发布时间】:2017-01-09 16:36:59
【问题描述】:
我有一个通用类,它由多维数据(即 n 维 Ararys 或 Vectors)构成。
在这种情况下,除了维度(Vector[Vector[T]] 但不是Vector[Array[T]])之外,我希望该类仅由一种类型(例如Vector)实例化。
具有此类签名:
class Foo[T](x: Vector[T], y: Bar[T])
我怎么能保证 T 会是 Vector[T] 或 Vector[Vector[T]](或等等),但不是 Array[T] 或 Vector[Array[T]]?
【问题讨论】:
-
Vector[Array[Int]] 和 Vector[Array[Int]] 有什么区别,Vector[Array[Int]] 是二维的,集合类型不同,是不允许的,Vector[Array[Int]] 是一维的,只有一个集合类型(Vector),元素类型只是碰巧是Array[Int]?如果有人想给你一个 Vector[Vector[Int]],但他们只希望你处理外部维度而将内部维度留给他们,会发生什么?到目前为止,你想要的东西违反了 Liskov 替换原则:我可以传入一个 Vector[Any],但我不能给你一个 Vector[Seq[_]],即使它是一个子类型。
标签: arrays scala generics multidimensional-array vector