定义具有私有成员的类的最佳方式,这些成员可以在一行中轻松实例化



假设我有以下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库的注释。此外,一旦类被实例化或以其他方式从数据库中获得,我就必须能够修改各个字段(可变的)。

地址可以定义为:

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() = {...}
}

编辑:固定@嵌入式

如果没有,你可能不得不求助于

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"不会编译。

相关内容

最新更新