Scala getClass匹配超类/特征

vir*_*yes 1 scala runtime class 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
Run Code Online (Sandbox Code Playgroud)

尝试了一个带有classOfisAssignableFrom的守卫,以及循环遍历x.getInterfaces(我至少看到_Foo那里),但是在直接"精益"匹配方面没有运气.

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

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

谢谢

Tom*_*icz 5

您应该使用this而不是getClass:

this match {
Run Code Online (Sandbox Code Playgroud)

目前你正在调用getClass(返回Class[T]类型的对象) - 确保java.lang.Class类没有扩展你的_Foo特性 - 这就是" 为什么? "

  • @virtualeyes:编辑问题后我的建议仍然有效:`getClass` - >`this` ... (2认同)