2011-08-23 71 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

相關問題