写出一个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)
我如何确保它不返回单位?
在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
.
归档时间: |
|
查看次数: |
103 次 |
最近记录: |