String を型にキャストすると、Any
自動的にString
--Why?と見なされなくなります。次の例を参照してください。
val str = "foo"
val strAsAny = "bar".asInstanceOf[Any]
def f1(x: String) = println(x.toString)
def f2(x: Any) = println(x.toString)
f1(str) // works, type exactly given
f2(str) // works, subtype of Any given
f1(strAsAny) // works not, but strAsAny.isInstanceOf[String] = true !
f2(strAsAny) // works, type exactly given
両方の値がまだタイプを持っているので、これは少し混乱しますString
:
scala> str.isInstanceOf[String]
res4: Boolean = true
scala> strAsAny.isInstanceOf[String]
res5: Boolean = true
私の推測では、interhitance-chain の「上に移動するための」型変換のみが自動的に行われるということです。これは正しいです ?