反思Scala类的特征?

时间:2012-10-27 09:23:36

标签: scala

在Scala的某个地方是否有内省api来查找类正在实现的特征?

对于Scala 2.9.2来说。

2 个答案:

答案 0 :(得分:1)

Scala中的Trait转换为Java中的接口,因此您可以使用Java的反射库来找出实现的特征。这是一个例子:

trait Foo
class Bar extends Foo 

val b = new Bar
b.getClass.getInterfaces.foreach(println)

打印:

interface Foo
interface scala.ScalaObject

答案 1 :(得分:0)

请注意,如果特性由超类实现,则使用的示例Kim Stebel不起作用。这是一个更通用的形式:

  def implementsInterface(target: Class[_], someInterface: Class[_]): Boolean = {
    val i = target.getInterfaces
    i.foreach((c: Class[_]) => if (c == someInterface) return true)

    val s = target.getSuperclass

    if (s == null) false
    else implementsInterface(s, someInterface)
  }