【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多