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 に答える