Scala 为什么asInstanceOf不';t启动隐式转换?
我有一个case类和一个伴随对象。 我在同伴对象中使用隐式转换方法Scala 为什么asInstanceOf不';t启动隐式转换?,scala,casting,implicit-conversion,implicit,Scala,Casting,Implicit Conversion,Implicit,我有一个case类和一个伴随对象。 我在同伴对象中使用隐式转换方法 case class Foo(p:T) object Foo { implicit def Foo2Bar(foo: Foo): Bar = new Bar(doSmth(foo.p)) } 我有一个参数类型为Object的方法。我想在那里传递一个Bar的实例。 不幸的是,下面的代码没有进行转换,而是抛出ClassCastException: import Foo._ ... val foo = createFoo()
case class Foo(p:T)
object Foo {
implicit def Foo2Bar(foo: Foo): Bar = new Bar(doSmth(foo.p))
}
我有一个参数类型为Object
的方法。我想在那里传递一个Bar
的实例。
不幸的是,下面的代码没有进行转换,而是抛出ClassCastException
:
import Foo._
...
val foo = createFoo()
bazz(foo.asInstanceOf[Bar])
同时,下一个(更详细的)代码将完成这项工作:
import Foo._
...
val foo = createFoo()
val bar: Bar = foo
bazz(bar)
你知道前一个代码为什么不起作用吗?
的实例只处理子类型关系,但定义隐式转换不会创建子类型关系。你可以使用bazz(foo:Bar)
。这将触发隐式转换。请注意,如果bazz
需要一个Bar
,那么bazz(foo)
也就足够了。