2010-11-23 103 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