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

无法找到类型为scala.reflect.ClassManifest [T]的证据参数的隐

发布时间:2020-12-16 09:11:49 所属栏目:安全 来源:网络整理
导读:看来我不明白什么重要,也许是擦除(死). 我有一个方法,我想创建一个大小为n的数组,其中包含来自gen的值: def testArray[T](n: Int,gen: =T) { val arr = Array.fill(n)(gen) ...} 并使用它,例如: testArray(10,util.Random.nextInt(10)) 但是我收到错误: s
看来我不明白什么重要,也许是擦除(死).

我有一个方法,我想创建一个大小为n的数组,其中包含来自gen的值:

def testArray[T](n: Int,gen: =>T) {
  val arr = Array.fill(n)(gen)
  ...
}

并使用它,例如:

testArray(10,util.Random.nextInt(10))

但是我收到错误:

scala: could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[T]
val arr = Array.fill(n)(gen)
                       ^

请,解释我做错了什么,为什么这个错误,以及什么样的代码是不可能的?

解决方法

那是因为在testArray中,T的具体类型在编译时是不知道的.您的签名必须像def testArray [T:ClassManifest](n:Int,gen:=> T),这将添加一个类型为ClassManifest [T]的隐式参数到您的方法中,这将自动传递给testArray然后进一步传递给Array.fill调用.这被称为上下文绑定.

(编辑:李大同)

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

    推荐文章
      热点阅读