2

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

对于 Scala 2.9.2 就是这样。

4

2 回答 2

2

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

trait Foo
class Bar extends Foo 

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

这打印:

interface Foo
interface scala.ScalaObject
于 2012-10-27T10:27:22.897 回答
0

请注意,如果 trait 由超类实现,则 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)
  }
于 2013-02-04T16:53:08.017 回答