类定义认为设置变量是一个单元?

cro*_*ies 1 scala

写出一个Scala类和问题是编译器认为代码是一个没有返回正确值的单元.这是一个用于在类中设置属性的方法:

def setObject(`object`:StripeObject):StripeObject = {
    this.`object` = `object`
  }
Run Code Online (Sandbox Code Playgroud)

错误是: type mismatch; found : Unit required: com.stripe.StripeObject

全班是:

case class EventData(var previousAttributes: HashMap[String,Object], var `object`:StripeObject) extends StripeObject {

  def getPreviousAttributes = {
    previousAttributes
  }

  def setPreviousAttributes(previousAttributes: HashMap[String, Object]) = {
    this.previousAttributes = previousAttributes
  }

  def getObject = {
    `object`
  }

  def setObject(`object`:StripeObject):StripeObject = {
    this.`object` = `object`
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何确保它不返回单位?

Tra*_*own 5

在Java中,setter通常用void返回类型定义:

public void setObj(StripeObject name);
Run Code Online (Sandbox Code Playgroud)

Scala等价物Unit,也是赋值表达式的值.所以在Scala中你会写一个setter作为以下之一(它们都是等价的,第一个是最惯用的):

def setObj(obj: StripeObject) {
  this.obj = obj
}

def setObj(obj: StripeObject): Unit = {
  this.obj = obj
}

def setObj(obj: StripeObject) = this.obj = obj
Run Code Online (Sandbox Code Playgroud)

这只是setter的惯例,如果你愿意,你可以轻松返回值:

def setObj(obj: StripeObject): StripeObject = {
  this.obj = obj
  obj
}
Run Code Online (Sandbox Code Playgroud)

这有点不寻常,但即使对于期待的来电者也不会引起问题Unit.