2012-04-14 32 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