2010-11-23 102 views
4

我在我的Scala代碼中試驗隱式變量。我寫了下面的示例代碼,但不幸的是它無法編譯。我想知道,有人知道這裏缺少什麼嗎? (在Linux上使用階2.8.0與SBT 0.7.4)斯卡拉,在特質中訪問類抽象類型

謝謝, 阿里

trait Feed 
trait FeedFactory { 
type T <: Feed 
implicit val op_name = classOf[T].getCanonicalName  
def create():T 
def destroy(op:T) 
} 

Error: class type required but FeedFactory.this.T found  
implicit val op_name = classOf[T].getCanonicalName 

回答

5

類型T是在編譯時(見類型擦除)遺忘。但斯卡拉提供Manifest s通過編譯保留類型。

這是一個更完整的explanation

+0

謝謝,我用隱式val修正它op_name = { def op_name [T](implicit m:scala.reflect.Manifest [T])= {m.getClass.getCanonicalName}; op_name}但我覺得它看起來有點難看,因爲我需要定義一個隱式變量,有沒有更好的方法來做到這一點? – 2010-11-23 02:57:18