如何将java.lang.Object与Scala模式匹配相匹配

时间:2012-11-20 00:49:10

标签: scala pattern-matching

我正在尝试使用Scala来查找Java类序列的基类(除java.lang.Object之外)。我已经定义了一个递归函数:

def baseClass(cls: Class[_]): Class[_] = {
  val nextClass = cls.getSuperclass
  nextClass match {
    case java.lang.Object => cls 
    case _ => baseClass(nextClass)
  }
}

编译器给出以下错误: error:object Object不是值

如何正确终止递归并返回java.lang.Object下面的类?

1 个答案:

答案 0 :(得分:3)

scala> (new Object) match { case o: Object => "hi" }
res2: java.lang.String = hi

除了这对你没有帮助,因为Object是你所匹配的超类。

此功能可以满足您的需求。

def baseClass(cls: Class[_]): Class[_] = { 
  val nextClass = cls.getSuperclass
  println(nextClass)
  if(classOf[Object] == nextClass)
    cls
  else {
    baseClass(nextClass)
  }
}

scala> baseClass(classOf[java.util.ArrayList[_]])
class java.util.AbstractList
class java.util.AbstractCollection
class java.lang.Object
res9: java.lang.Class[_] = class java.util.AbstractCollection