加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

关于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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读