【问题标题】:working with class as function parameter in Scala在 Scala 中使用类作为函数参数
【发布时间】:2022-01-27 22:28:38
【问题描述】:

假设我有以下功能:

def sampleFunc (c : Class[]) : Boolean

它需要一个类作为参数。然后它检查某个元素 el 是否属于 Class[] 类型。 我尝试通过这样做来实现这一目标

el.isInstanceOf[Class[]]

但这不起作用,它总是返回 false。 有人看到我在这里做错了吗?

【问题讨论】:

    标签: scala


    【解决方案1】:
    c.isInstance(el)
    

    是 Java 中 instanceof 运算符的动态等效项(即 Scala 中的 isInstanceOf 方法)。

    【讨论】:

      【解决方案2】:

      你需要使用类型类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))
      

      将分别打印truefalse

      【讨论】:

      • 谢谢。当我用自己的类调用该函数时,它说:没有可用的清单
      • @HeloKitay 尝试使用 classTag
      • 那行得通。谢谢你。但为什么这真的有效呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      相关资源
      最近更新 更多