如何在scala中编写函数isCaseObject?

如何在scala中编写函数isCaseObject?,scala,Scala,如何在scala中编写isCaseObject函数,以便: def isCaseObject(x:Any) = /* Some Code */ case object aCaseObject println(isCaseObject(aCaseObject)) //true println(isCaseObject("not a case object")) //false 使用反射(Scala 2.10M4),可以按如下方式进行: import scala.reflect.runtime.

如何在scala中编写isCaseObject函数,以便:

def isCaseObject(x:Any) = /* Some Code */

case object aCaseObject
println(isCaseObject(aCaseObject)) //true
println(isCaseObject("not a case object")) //false
使用反射(Scala 2.10M4),可以按如下方式进行:

import scala.reflect.runtime.universe.Flag
import scala.reflect.runtime.{ currentMirror => cm }

object Check {

  def isCaseObject(x:Any): Boolean = {
    cm.reflect(x).symbol.hasFlag(Flag.CASE)
  }

}

所有案例类都扩展了产品,因此您可以使用类型系统:

 def isCC[A](a: A)(implicit ev: A <:< Product) = a

虽然这不能证明它是,但它可以是。它只能证明它是一个产品,case类没有独占类型
scala> isCC("test")
<console>:17: error: Cannot prove that java.lang.String <:< Product.
              isCC("test")
scala> case class CA(a: Int)
defined class CA

scala> isCC(CA(1))
res19: CA = CA(1)