为什么从Class [String]到Class [Any]的类型转换成功编译?

时间:2018-03-10 14:50:08

标签: scala generics

为什么从Class [String]到Class [Any]的类型转换成功编译?

object Test extends App {
  var anyClass: Class[Any]    = classOf[Any]
  val strClass: Class[String] = classOf[String]

  /* The following codes compile error: Expression of type Class[String] doesn't conform to expected type Class[Any]. */
  //oClass = sClass

  /* The following codes compile and run successfully. */
  val str2anyClass = strClass.asInstanceOf[Class[AnyRef]]

  println(str2anyClass.toString) // Output: class java.lang.String

}

1 个答案:

答案 0 :(得分:2)

  

为什么从Class [String]到Class [Any]的类型转换编译   成功吗?

由于Class[A]中的A不变,并且根据Scala规范,您的代码无效。

当您使用asInstanceOf显式投射时,所有投注均已关闭,您告诉编译器您知道自己在做什么以及它应该信任您。