Scala的选项[classOf[...]]的匹配/大小写

pcww981p  于 2022-11-09  发布在  Scala
关注(0)|答案(2)|浏览(144)

我需要检查方法返回的类型以调用不同的方法。代码是这样的:

class X ...
class Y ...

...

def getType(input:String) : Option[Class[_]] = {
  if ... return Some(classOf[X])
  if ... return Some(classOf[Y])
  ...
}

getType(input) match {
  case Some(classOf[X]) => ... // ERROR
  case Some(classOf[Y]) => ...
  case None => ...
}

但是,我得到了错误:

可能出了什么问题?

ukqbszuj

ukqbszuj1#

我认为您不能在结构匹配中使用classOf。相反,您可以添加一个条件来检查这一点。

val opt: Option[Class[_]] = Some(classOf[Int])

opt match {
  case Some(c) if c == classOf[String] => "String"
  case Some(c) if c == classOf[Int] => "Int"
  case None => "No Class"
  case _ => "Some other Class"
} //yields Int
zzwlnbp8

zzwlnbp82#

您可以执行以下操作:

getType(input) match {
  case Some(x: Class[X]) => ... 
  case Some(y: Class[Y]) => ...
  case None => ...
}

相关问题