使用可以在一行中轻松实例化的私有成员定义类的最佳方法?

时间:2011-06-27 16:40:55

标签: scala groovy

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

1 个答案:

答案 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”将无法编译。