2012-04-14 29 views
1

挂上一个看起来很简单的问题,其中有很多信息(太多的信息需要了解当前状态)。Scala getClass match on super class/trait

无论如何,在这里。

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 

已经尝试了后卫classOfisAssignableFrom,以及循环通过x.getInterfaces(我至少看到_Foo那里),但没有运气的直接“精益条款“ 比赛。

这是擦除“工作”还是我错过了明显的1班轮?

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

感谢

回答

5

您应该使用的this代替getClass

this match { 

目前您所呼叫getClass(返回对象Class[T]类型) - 为确保java.lang.Class类不延长你_Foo特质 - 那是“为什么?

+0

对不起,澄清的问题反映从哪里我试图确定当前实例是_Foo的子类;即从另一个特点 - 请参阅编辑 – virtualeyes 2012-04-14 18:03:47

+2

@virtualeyes:在您编辑您的问题后,我的建议仍然有效:'getClass' - >'this' ... – 2012-04-14 18:11:53

+0

是的!好的托马斯,谢谢 – virtualeyes 2012-04-14 18:20:40