0

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

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

编译器给出以下错误:错误:对象对象不是值

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

4

1 回答 1

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
于 2012-11-20T00:59:08.963 回答