假设我有以下scala类(需要改进以解决问题) 在这个问题中,可能不是有效的scala类):
@Entity
class Hotel extends Model {
private var name: String = _;
private var stars: Int = _;
@Embedded
private var address: Address = _;
def someMethod() = {
// do something
}
}
class Address {
private var street: String = _;
private var city: String = _;
private var postCodet: String = _;
}
在groovy中,我可以单独执行此操作:
def hotel = new Hotel(name: "some Hotel", stars: 5, address: new Address(street: "342 main", city: "edmond", postCode: "12345"))
Scala是否有类似的东西,我如何改进上面显示的类声明来改进设计。请注意,我必须有来自另一个Java库的那些注释。一旦一个类被实例化或以其他方式从数据库中获得,我必须能够修改单个字段(可变)。
答案 0 :(得分:4)
地址可以定义为:
class Address(var street:String, var city: String, var postCodet: String)
这假设您希望以后可以修改变量。
您可以使用
创建地址new Address(street="street", city="city", postCodet="a1a1a1")
由于需要注释,酒店更有趣。我认为这会为你解决问题:
class Hotel(var name:String, var stars:Int, @Embedded var address: Address) extends Model {
def someMethod() = {...}
}
编辑:修正@Embedded
如果没有,你可能不得不求助于:
class Hotel(var name:String, var stars:Int, address_in: Address) extends Model {
@Embedded
var address:Address = address_in
...
}
注意,如果对象上的变量不可修改,则可以在类定义上使用val而不是var。这样,像address.street这样的东西会返回street的当前值,但是address.street =“new street address”将无法编译。