【问题标题】:How do I match java.lang.Object with Scala pattern matching如何将 java.lang.Object 与 Scala 模式匹配匹配
【发布时间】:2012-11-20 09:05:51
【问题描述】:
我正在尝试使用 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 正下方的类?
【问题讨论】:
标签:
scala
pattern-matching
【解决方案1】:
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