2012-11-20 73 views
0

我想使用Scala來查找Java類序列的基類(java.lang.Object除外)。我已經定義了一個遞歸函數:我如何匹配java.lang.Object與匹配的Scala模式

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

編譯器提供了以下錯誤: 錯誤:目標對象不是值

如何正確我終止遞歸和返回略低於java.lang中的類。目的?

回答

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