假設我有以下功能:
def sampleFunc (c : Class[]) : Boolean
它接受一個類作為引數。然后它檢查某個元素 el 是否屬于 Class[] 型別。我嘗試通過這樣做來實作
el.isInstanceOf[Class[]]
但這不起作用,它總是回傳false。有人看到我在這里做錯了嗎?
uj5u.com熱心網友回復:
c.isInstance(el)
是instanceofJava 中運算子的動態等價物(即isInstanceOfScala 中的方法)。
uj5u.com熱心網友回復:
您需要使用型別類 scala.reflect.ClassTag[T]
import scala.reflect.ClassTag
import scala.reflect.classTag
def sampleFunc[T: ClassTag](el: Any): Boolean = {
classTag[T].runtimeClass.isInstance(el)
}
或通過模式匹配
def sampleFunc[T: ClassTag](el: Any): Boolean = {
el match {
case _: T => true
case _ => false
}
}
但是,el.isInstance[T]由于 java 中的型別擦除,仍然不支持。
現在
println(sampleFunc[String](""))
println(sampleFunc[String](1))
將分別列印true和false。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/399139.html
標籤:斯卡拉
