关于Scala泛型:找不到元素类型T的类清单
发布时间:2020-12-16 09:00:46 所属栏目:安全 来源:网络整理
导读:对于以下功能: def reverse[T](a: Array[T]): Array[T] = { val b = new Array[T](a.length) for (i - 0 until a.length) b(i) = a(a.length -i - 1) b} 我从第2行得到“错误:无法找到元素类型T的类清单”. 反正有没有解决这个问题? 解决方法 只需在方法
对于以下功能:
def reverse[T](a: Array[T]): Array[T] = { val b = new Array[T](a.length) for (i <- 0 until a.length) b(i) = a(a.length -i - 1) b } 我从第2行得到“错误:无法找到元素类型T的类清单”. 反正有没有解决这个问题? 解决方法
只需在方法声明中添加上下文绑定
ClassManifest:
def reverse[T : ClassManifest](a: Array[T]): Array[T] = ... 为了构造一个数组,必须在编译时知道数组的具体类型.此类型由编译器通过隐式ClassManifest参数提供.也就是说,Array构造函数的签名实际上是 Array[T](size: Int)(implicit m: ClassManifest[T]): Array[T] 为了提供此参数,在调用Array构造函数时,范围内必须有ClassManifest.因此,您的反向方法还必须采用隐式ClassManifest参数: def reverse[T](a: Array[T])(implicit m: ClassManifest[T]): Array[T] = ... // or equivalently def reverse[T : ClassManifest](a: Array[T]): Array[T] = ... 后者,更简单的表示法称为context bound. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |