我不明白为什么当我尝试使用泛型case
时编译器无法理解元组上的Array[T]
指令映射。
class Variable[T](val p: Prototype[T], val value: T)
class Prototype[T](val name: String)(implicit m: Manifest[T])
// Columns to variable converter
implicit def columns2Variables[T](columns:Array[(String,Array[T])]): Iterable[Variable[Array[T]]] = {
columns.map{
case(name,value) =>
new Variable[Array[T]](new Prototype[Array[T]](name), value)
}.toIterable
}
错误说:
error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: fr.geocite.simExplorator.data.Variable[Array[T]]
case(name,value) =>
答案 0 :(得分:0)
我也不确定错误的措辞,但首先,您需要T
的清单,因为它是构建new Prototype[Array[T]]
所必需的(数组清单可以自动生成)如果其类型参数的清单在范围内,则生成。)
你有绝对需要数组的原因吗?它们带有Java类型系统的不规则性,它们是可变的,并且它们比例如Vector
提供的优势很小。最后,这可能是为什么随身携带清单,不像数组标准集合不需要用于构造的清单。
class Variable[T](val p: Prototype[T], val value: T)
class Prototype[T](val name: String)
implicit def cols2v[T](cols: Vector[(String,Vector[T])]): Vector[Variable[Vector[T]]] =
cols.map {
case (name, value) => new Variable(new Prototype(name), value)
}