public MyConstructor(MyConstructor mc){
this.setId(mc.getId());
this.setName(mc.getName());
}
在这里,为什么我们需要通过获取其getter方法来在构造函数中设置值。这背后有什么特殊目的吗?
正如其他答案中已指出的那样,这种构造函数主要用于克隆对象,有时也称为复制构造函数
正如Joshua Bloch在他的《有效的Java》一书第11条中所建议的那样,这种构造clone()
方法通常比实现该方法更可取,因为该clone()
方法存在一些问题(有关详细信息,请参见本书或相应的stackoverflow问题)。
没有引人注目的理由来实现它完全一样的-因此,人们并不真正需要它正是这种形式。正如评论中提到的,人们可以(最有可能)将其写为
public MyConstructor(MyConstructor mc){
this.id = mc.getId();
this.name = mc.getName();
}
或者
public MyConstructor(MyConstructor mc){
this.setId(mc.id);
this.setName(mc.name);
}
或者
public MyConstructor(MyConstructor mc){
this.id = mc.id;
this.name = mc.name;
}
作者在这里选择使用嵌套set(mc.get())
方法。它具有潜在的优势,即它仅依赖于get
/set
方法定义的接口,因此可能对更改更健壮。
有人可能会争论这是否是一种好的做法,但我认为对于复制构造函数而言,它很好且清楚地指出:“此对象仅在给定对象的基础上(且完全类似于)被初始化”。
旁注:克隆对象并为克隆赋予相同的ID很有可能会破坏ID的目的-但在某些情况下,这样做是适当的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句