【发布时间】:2017-05-05 00:41:50
【问题描述】:
我正在通过以下示例使用 Scala 的类型系统:
scala> sealed trait A
defined trait A
scala> case class A1(n: Int) extends A
defined class A1
scala> case class A2(n: Int) extends A
defined class A2
scala> case class MyCase[+P <: A](a: A, y: String)
defined class MyCase
scala> val l = List(MyCase[A1](A1(1), "A1"), MyCase[A2](A2(2), "A2"))
现在,当我执行以下操作时:
scala> l.head.asInstanceOf[MyCase[A2]]
res2: MyCase[A2] = MyCase(A1(1),A1)
如何将MyCase[A1] 实例分配给MyCase[A2] 引用?我的意思是 MyCase[A1] 和 MyCase[A2] 在对象层次结构中处于同一级别!
【问题讨论】:
-
是的,很抱歉造成混乱!我的问题实际上是一些东西。我修改了上面的帖子
-
如果没有使用类型参数 P,那有什么意义呢?
-
“如何将
MyCase[A1]对象分配给MyCase[A2]引用?” -- 因为你用类型强制它演员。 -
asInstanceOf是不安全的操作。你告诉编译器“相信我,我知道我在做什么”。如果强制转换无效,您可能会立即收到运行时错误,或者您可能不会 - 您可能会在以后遇到问题。asInstanceOf从不在普通的 Scala 代码中使用。
标签: scala