【发布时间】:2022-01-27 05:03:08
【问题描述】:
如果我运行以下代码,则会出现错误:
import scala.reflect.ClassTag
class General {
}
class SubGeneral extends General {
def test() = println("tested")
}
class ProGeneral[T <: General: ClassTag] {
var array = Array.ofDim[T](3, 3)
def funcForSubGeneral(): Unit =
if (array(0)(0).isInstanceOf[SubGeneral]) then array(0)(0).test()
}
那是因为General没有函数test()。 我知道我可以通过模式匹配来解决这个问题。这代替了上面的 funcForSubGeneral() 工作:
def funcForSubGeneral(): Unit =
array(0)(0) match {
case s: SubGeneral => s.test()
case _ => println("nope")
}
但我想知道是否可以获取 array(0)(0) 的运行时类型并检查它是否是 SubGeneral,如果是这样,那么我调用 test(),这不应该导致一个问题? 这就是我使用 isIntanceOf 实际尝试的。我想省略模式匹配,因为我只对一种类型感兴趣。
【问题讨论】: