以下是我定义的课程
private Configuration config = Play.application().configuration();
@Inject
public DummyService() {
this.dummy = new DummyModel(config.getString('some-value'));
}
我改变了person1地址的城市但是为什么person2城市改变了,我该如何克服这个问题呢?
答案 0 :(得分:4)
您正在使用Class作为Address对象。所以,它通过引用传递。有关值和参考类型的更多详细信息,请查看此帖子,https://developer.apple.com/swift/blog/?id=10。
在您的情况下,如果您将地址从类更改为结构,则一切都按预期工作,因为结构按值传递。
struct Address {
let city: String
let country: String
}
并且,请注意您不需要任何初始化程序。默认情况下,Struct会创建初始化程序,您可以像上面那样使用它。
答案 1 :(得分:3)
面向对象的编程101。
您将address
的同一个实例传递给两个对象。从本质上讲,它意味着John和Adam具有相同的地址,当该地址发生变化时,它们的地址(只是一个对象)都会发生变化。
如果您想将Address
用作value type
而不是reference type
,则可以将地址转换为struct
,其他所有内容都可以正常运行:< / p>
struct Address {
var city: String
var country: String
init(city: String, country: String){
self.city = city
self.country = country
}
}
值类型,如Int
和Double
(以及结构,就像我们刚刚看到的那样)只能通过值来标识,而不能通过它们的底层内存地址来标识。
答案 2 :(得分:1)
您实际上是在向您的人员传递地址指针。
由于两个人都指向同一个地址,因此更改Person1的地址也会改变Person2的地址。