在Scala中获取超类函数

时间:2011-11-29 19:16:40

标签: scala functional-programming superclass

在Scala中获取给定Class实例的超类的简短功能方法是什么?

我能想到的就是这个

def supers(cl: Class[_]): List[Class[_]] = {
  cl :: Option(cl.getSuperclass).map(supers).getOrElse(Nil)
}

有没有人知道一些带有一些奇特功能结构的简短形式?

1 个答案:

答案 0 :(得分:4)

不完全是花哨的功能构造,但(略微)更短:

def supers(cl: Class[_]): List[Class[_]] = {
    if (cl == null) Nil else cl :: supers(cl.getSuperclass)
}

scala> class Foo; class Bar extends Foo; class Baz extends Bar
defined class Foo
defined class Bar
defined class Baz

scala> supers(classOf[Baz])
res9: List[Class[_]] = List(class Baz, class Bar, class Foo, class java.lang.Object)

请注意,这会为您提供类及其所有超类,但是OP提供的类​​也是如此。