【发布时间】:2023-04-04 11:02:01
【问题描述】:
Scala 版本 2.13
更新:
我认为t 不能转换为A with B,因为t 不能是B。
喜欢下面的代码。
t 在运行时创建时没有任何异常,这不是预期的。
a 不能是 B。
打印出来的(false, false)也表明了这一点。
class Base
class A extends Base {
override def toString: String = "obj A"
}
trait B extends Base {
override def toString: String = "obj B"
}
type t1 = A with B
val a = new A
val t = a.asInstanceOf[t1]
println(a,t)
println(a.isInstanceOf[t1], a.isInstanceOf[B])
【问题讨论】:
-
您的问题是什么?我不明白。
-
我认为他的问题是为什么
asInstanceOf[A with B]在A类型上调用时不会抛出异常。我认为这里涉及到一些运行时魔法,因为B是这里的特征。例如显式调用t.toString会抛出异常。