在Scala的某个地方是否有内省api来查找类正在实现的特征?
对于Scala 2.9.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)
}