Scala 定义一个具有私有成员的类的最佳方法,这些成员可以很容易地在一行中实例化?
假设我有以下scala类(需要改进以解决这个问题 在这个问题中,可能不是有效的scala类): 在groovy中,我可以用单步执行此操作,如:Scala 定义一个具有私有成员的类的最佳方法,这些成员可以很容易地在一行中实例化?,scala,groovy,Scala,Groovy,假设我有以下scala类(需要改进以解决这个问题 在这个问题中,可能不是有效的scala类): 在groovy中,我可以用单步执行此操作,如: def hotel = new Hotel(name: "some Hotel", stars: 5, address: new Address(street: "342 main", city: "edmond", postCode: "12345")) Scala是否有类似的功能,以及如何改进上面所示的类声明以改进设计。注意,我必须有来自另一个Ja
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() = {...}
}
编辑:固定@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”将不会编译。地址可以定义为:
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”将不会编译。谢谢,这非常有用。我试试看。你们能告诉我,若我像你们提到的那个样声明类,那个么这些变量在默认情况下被认为是私有的,因为我并没有看到private关键字吗?我甚至不知道private是否能确保scala代码中的封装(因为我们仍在直接修改字段),就像客户端只能通过Java类中的公共getter和setter访问或修改变量一样。如果您真的不需要更改它们,那么案例类及其
copy
方法非常好:val newAddress=theAddress.copy(postcode=“b2b2b2”)
。在Scala中,默认访问是公共的。如果您希望一个字段在构造时可以设置,但之后不可读,那么您应该将类地址(private-val-street:String)放入其中。如果您还没有,我会郑重建议您直接在Scala中获取Scala第二版()@amc Nothing访问字段中的编程。所有的访问都是通过getter和setter方法进行的——您只是没有注意到它,因为您从未看到字段本身。谢谢,这非常有帮助。我试试看。你们能告诉我,若我像你们提到的那个样声明类,那个么这些变量在默认情况下被认为是私有的,因为我并没有看到private关键字吗?我甚至不知道private是否能确保scala代码中的封装(因为我们仍在直接修改字段),就像客户端只能通过Java类中的公共getter和setter访问或修改变量一样。如果您真的不需要更改它们,那么案例类及其copy
方法非常好:val newAddress=theAddress.copy(postcode=“b2b2b2”)
。在Scala中,默认访问是公共的。如果您希望一个字段在构造时可以设置,但之后不可读,那么您应该将类地址(private-val-street:String)放入其中。如果您还没有,我会郑重建议您直接在Scala中获取Scala第二版()@amc Nothing访问字段中的编程。所有访问都是通过getter和setter方法进行的——您只是没有注意到它,因为您从来没有看到字段本身。