Scala 为什么asInstanceOf不';t启动隐式转换?

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类和一个伴随对象。 我在同伴对象中使用隐式转换方法

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)
也就足够了。