【发布时间】:2021-09-05 17:53:31
【问题描述】:
我正在尝试编写一个通用函数,它接受一个类型参数 T,它是 Seq[String] 的子集,下面是示例示例
def test[T <:Seq[String]](c:T):T = {
c
}
我定义了一个变量,它是 Array[String]
val b = Array("test")
现在我希望这可以工作,但是,我收到如下错误
scala> test(b)
^
error: inferred type arguments [Array[String]] do not conform to method test's type parameter bounds [T <: Seq[String]]
^
error: type mismatch;
found : Array[String]
required: T
我尝试将 T 定义为 Iterable[String] 的子集,但这也不起作用。
我知道 Scala 中的 Array 不是 Seq,但我希望它被隐式转换为 WrappedArray 和这个函数仍然有效。有人可以帮我看看这是怎么回事吗?
【问题讨论】:
-
这是因为
Array来自 Java 领域并且位于标准 Scala 集合之外。它可以完成,但它不是微不足道的,并且在某种程度上取决于您正在运行的 Scala 版本。
标签: scala generics scala-collections