Scala getClass匹配超类/特征

时间:2012-04-14 17:52:59

标签: class scala runtime parent match

对一个看似简单的问题感到困惑,因为有大量的信息(过多的东西要过去了解当前状态是什么)。

无论如何,这里都是。

trait _Foo
class Foo Extends _Foo with WhoAmI
trait WhoAmI {
  def who = {
    getClass match {
      case x: _Foo => "should be Foo instance, which extends _Foo"
      case _ => "why?"
    }
  }
}
val foo = new Foo
foo.who

已尝试使用 classOf isAssignableFrom ,以及循环 x.getInterfaces (我至少看到_Foo) ,但直接的“精益”比赛没有运气。

这种擦除是“在工作中”还是我错过了一个明显的1-liner?

如果这是许多其他线程的副本,我们可以关闭,但请指出我正确的方向! ; - )

由于

1 个答案:

答案 0 :(得分:5)

您应该使用this代替getClass

this match {

目前您正在调用getClass(返回Class[T]类型的对象) - 确保java.lang.Class类不会扩展您的_Foo特征 - 这是“为什么?的“