getters应该只返回对象:
public MyObject getMyObject() {
return myObject;
}
或者它应该复制它返回的对象并返回副本吗?
public MyObject getMyObject() {
MyObject tempObject;
// call setters to set its attributes
return tempObject;
}
这里的高中“CS”课程不够详细。我的老师从未谈过课程,对象和参考文献。
答案 0 :(得分:4)
这取决于你想要做什么。
但是,一般情况下,您只需要对该对象的引用,并使用您的第一个代码示例。例如,Swing组件有一个名为getTopLevelAncestor()
的方法。拥有父组件的副本是完全没用的 - 所需要的是对孩子的实际父母的引用。
返回副本不是标准副本,只能在非常具体(并且记录良好)的情况下使用。使用您的代码的其他人不希望获得对象的副本。
答案 1 :(得分:3)
唯一的区别是,虽然返回的基元本质上是“不可变的”,但是像这样直接返回一个对象可能允许调用者更改它的属性(假设MyObject
是可变的),可能会影响内部的你班级的实施。 (像FindBugs这样的代码分析工具检查这一点。原语实际上是可变的,但是当从类中返回时,无法通过返回的原语更新类的值。)考虑到,返回副本通常是更安全的选择/ clone - 理解这可能会导致性能损失。
无论您选择哪种方式,请使用Javadoc记录您的课程或个人方法的作用。