在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]
参数?
答案 0 :(得分:1)
我可能会对你想要完成的事情感到困惑,但通常在这种情况下,如果没有参数,就会为构造函数提供一个类型参数,这将提供足够的信息来自动创建隐式。
class Blah[A <: Parent](implicit m: Manifest[A]) {
// ...m will be populated..
}
new Blah[Boy]
答案 1 :(得分:1)
这是不可能的。 Class[_]
包含的信息严格少于Manifest[_]
,因为清单还会保留类型参数。
因此,如果您只获得Manifest
,则无法想出Class
:您没有必要的信息。