我正在尝试使用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下面的类?
答案 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