【问题标题】:How could I overload trait variable我怎么能重载特征变量
【发布时间】:2012-01-24 16:32:45
【问题描述】:

您好,我有以下问题:

trait CarObject{ 
 val name: String
}

def takeCarObject(obj:CarObject)

我如何准备一个特征对象 CarObject 并将其传递给方法?

我试过了:

private def createCarObject(str: String) = new CarObject { val name = str}

但结果不是 CarObject !

【问题讨论】:

    标签: scala scala-2.8


    【解决方案1】:

    您也可以尝试像这样创建它:

    (new CarObject { val name = str}):CarObject
    

    结果类型将是CarObject

    【讨论】:

      【解决方案2】:

      这确实有效:

      scala> trait CarObject { val name: String }
      defined trait CarObject
      
      scala> def createCarObject(str: String) = new CarObject { val name = str }
      createCarObject: (str: String)java.lang.Object with CarObject
      
      scala> def createCarObject(str: String): CarObject = new CarObject { val name = str }
      createCarObject: (str: String)CarObject
      
      scala> val c = createCarObject("bmw")
      c: CarObject = $anon$1@5143c423
      
      scala> c.name
      res0: String = bmw
      

      注意:如果您没有显式地为方法设置返回值,则会推断返回值java.lang.Object with XXX,在这种情况下,XXX 是CarObject

      【讨论】:

      • 谢谢。这对我来说是个新信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多