2011-08-23 38 views
2

我的方法是如下为什么我的模式匹配在Scala中失败?

protected override def onEvent(event: Class[_]) = event match { 
    case event: mydomain.Quote => println("qu") 
    case _ => println("eventsample" + event) 

    } 

控制台打印出以下

eventsampleclass mydomain.Quote 

我认为这会在模式匹配被抓

回答

10

没有比赛,因为你的模式正在寻找一个引用的实例,并且您正在传递classOf[Quote],这是Class[Quote]的一个实例,而不是Quote

要匹配,您可以打电话onEvent(new myDomain.Quote(...)),而不是onEvent(classOf[myDomain.Quote])。 (编译器接受你的第一个模式是有点不幸的,因为它没有机会与Class类型的事件匹配)。

如果你想认识级[报价],你可以使用模式case c if c == ClassOf[Quote],但我看不出有任何理由不这样做一个简单的if/else