为什么asInstanceOf不会启动隐式转换?

时间:2014-07-25 14:34:15

标签: scala casting implicit-conversion implicit

我有一个带有伴侣对象的案例类。 我在伴侣对象中有隐式转换方法。

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)

为什么以前的代码不起作用的任何想法?

1 个答案:

答案 0 :(得分:3)

asInstanceOf仅处理子类型关系,但定义隐式转换并不会创建子类型关系。