在 Scala 的某个地方是否有一个自省 api 来找到一个类正在实现的特征?
对于 Scala 2.9.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
请注意,如果 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)
}