推广类到清单?

时间:2015-02-21 03:56:34

标签: scala

在Scala v.2.10.4中给出以下内容:

trait Parent

case class Boy extends Parent

class Blah[A <: Parent](implicit m: scala.reflect.Manifest[A]) { ... }

我尝试通过显式传递Foo参数来创建新的Manifest[A]

scala> res36
res45: Class[_] = class Boy

scala> new Blah()(res36)
<console>:16: error: type mismatch;
 found   : Class[_$1] where type _$1
 required: scala.reflect.Manifest[?]
              new Blah()(res36)
                         ^

如何实例化新的Foo,但直接传递Manifest[A]参数?

2 个答案:

答案 0 :(得分:1)

我可能会对你想要完成的事情感到困惑,但通常在这种情况下,如果没有参数,就会为构造函数提供一个类型参数,这将提供足够的信息来自动创建隐式。

class Blah[A <: Parent](implicit m: Manifest[A]) {
  // ...m will be populated..
}

new Blah[Boy]  

答案 1 :(得分:1)

这是不可能的。 Class[_]包含的信息严格少于Manifest[_],因为清单还会保留类型参数。

因此,如果您只获得Manifest,则无法想出Class:您没有必要的信息。