【发布时间】:2022-01-27 22:28:38
【问题描述】:
假设我有以下功能:
def sampleFunc (c : Class[]) : Boolean
它需要一个类作为参数。然后它检查某个元素 el 是否属于 Class[] 类型。 我尝试通过这样做来实现这一目标
el.isInstanceOf[Class[]]
但这不起作用,它总是返回 false。 有人看到我在这里做错了吗?
【问题讨论】:
标签: scala
假设我有以下功能:
def sampleFunc (c : Class[]) : Boolean
它需要一个类作为参数。然后它检查某个元素 el 是否属于 Class[] 类型。 我尝试通过这样做来实现这一目标
el.isInstanceOf[Class[]]
但这不起作用,它总是返回 false。 有人看到我在这里做错了吗?
【问题讨论】:
标签: scala
c.isInstance(el)
是 Java 中 instanceof 运算符的动态等效项(即 Scala 中的 isInstanceOf 方法)。
【讨论】:
你需要使用类型类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
}
}
但是,由于 java 中的类型擦除,el.isInstance[T] 仍然不受支持。
现在
println(sampleFunc[String](""))
println(sampleFunc[String](1))
将分别打印true 和false。
【讨论】: