“未找到”错误,但函数已定义

时间:2019-09-16 20:27:11

标签: scala

使用此类,我试图修改构造函数的String参数并将其转换为date:

  class OrderInstance(var size: Double,
                      var side: String,
                      var trade_id: Int,
                      var price: Double,
                      var time: java.util.Date,
                      var code: String) {
    def getTime(time: String): java.util.Date = new java.util.Date()
    def this(size: String,
             side: String,
             trade_id: Int,
             price: String,
             time: String, code: String) = this(size.toDouble: Double,
      side: String,
      trade_id: Int,
      price.toDouble: Double,
      getTime(time: String) : java.util.Date, code: String)



    // Step 3 - proper signature for `equals`
    // Steps 4 thru 7 - implement a `match` expression
    override def equals(that: Any): Boolean =
      that match {
        case that: OrderInstance => {
          that.canEqual(this) &&
            this.trade_id == that.trade_id
        }
        case _ => false
      }

    //     Step 1 - proper signature for `canEqual`
    //     Step 2 - compare `a` to the current class
    def canEqual(a: Any) = a.isInstanceOf[OrderInstance]

    // Step 8 - implement a corresponding hashCode c=method
    override def hashCode: Int = {
      val prime = 31
      var result = 1
      result = prime * result + trade_id;
      result = prime * result + (if (code == null) 0 else code.hashCode)
      result
    }

    override def toString = {
      String.valueOf(trade_id)
    }

  }

此行:

def getTime(time: String): java.util.Date = new java.util.Date()
应该调用

以便返回日期而不是String。但我收到错误消息:

Error:(54, 7) not found: value getTime
      getTime(time: String) : java.util.Date, code: String)

在运行时而不是编译时报告此错误。我没有正确定义函数getTime吗?

更新:

我试图更清楚地说明我要实现的目标:

class OrderInstance(var size: Double,
                    var side: String,
                    var trade_id: Int,
                    var price: Double,
                    var time: String,
                    var code: String){

  this(time) = this(OrderInstance.getTime(time))

  def this(size: String,
           side: String,
           trade_id: Int,
           price: String,
           time: String, code: String) = this(size.toDouble: Double,
    side: String,
    trade_id: Int,
    price.toDouble: Double,
    time : String, code: String)

  // Step 3 - proper signature for `equals`
  // Steps 4 thru 7 - implement a `match` expression
  override def equals(that: Any): Boolean =
    that match {
      case that: OrderInstance => {
        that.canEqual(this) &&
          this.trade_id == that.trade_id
      }
      case _ => false
    }

  //     Step 1 - proper signature for `canEqual`
  //     Step 2 - compare `a` to the current class
  def canEqual(a: Any) = a.isInstanceOf[OrderInstance]

  // Step 8 - implement a corresponding hashCode c=method
  override def hashCode: Int = {
    val prime = 31
    var result = 1
    result = prime * result + trade_id;
    result = prime * result + (if (code == null) 0 else code.hashCode)
    result
  }

  override def toString = {
    String.valueOf(trade_id)
  }

}
object OrderInstance {
  def getTime(time: String): java.util.Date = new java.util.Date()
}

new OrderInstance(1.0 , "" , 1 , 1.0 , "2019-09-13T16:27:19.881Z" , "")

这将返回错误:

Error:(60, 26) OrderInstance does not take parameters
this(time) = this(OrderInstance.getTime(time))

 this(time) = this(OrderInstance.getTime(time))

如何将time更新为日期而不是字符串?

2 个答案:

答案 0 :(得分:1)

getTime是一个实例方法,您正尝试从构造函数中调用它,即在实例创建之前。由于getTime实际上并未使用任何实例变量,因此您需要将其放置在同伴对象中(与static相等的scala)

class OrderInstance(
//...
) {
  this(string) = this(OrderInstance.getTime(string))
}

object OrderInstance {
   def getTime(time: String): java.util.Date = new java.util.Date()
}

答案 1 :(得分:0)

感谢用户user1186491的回答,此操作符合预期:

class OrderInstance(var time: java.util.Date){

  def this(time: String) = this(
    OrderInstance.getTime(time))
}

object OrderInstance {
  def getTime(time: String): java.util.Date = new java.util.Date()
}

val o = new OrderInstance("2019-09-13T16:27:19.881Z" )
println(o.time)