物体的吸气剂是否与原始物体不同?

时间:2012-01-01 02:08:55

标签: java methods get return-value

getters应该只返回对象:

public MyObject getMyObject() {
    return myObject;
}

或者它应该复制它返回的对象并返回副本吗?

public MyObject getMyObject() {
    MyObject tempObject;
    // call setters to set its attributes
    return tempObject;
}

这里的高中“CS”课程不够详细。我的老师从未谈过课程,对象和参考文献。

2 个答案:

答案 0 :(得分:4)

这取决于你想要做什么。

但是,一般情况下,您只需要对该对象的引用,并使用您的第一个代码示例。例如,Swing组件有一个名为getTopLevelAncestor()的方法。拥有父组件的副本是完全没用的 - 所需要的是对孩子的实际父母的引用。

返回副本不是标准副本,只能在非常具体(并且记录良好)的情况下使用。使用您的代码的其他人不希望获得对象的副本。

答案 1 :(得分:3)

唯一的区别是,虽然返回的基元本质上是“不可变的”,但是像这样直接返回一个对象可能允许调用者更改它的属性(假设MyObject是可变的),可能会影响内部的你班级的实施。 (像FindBugs这样的代码分析工具检查这一点。原语实际上是可变的,但是当从类中返回时,无法通过返回的原语更新类的值。)考虑到,返回副本通常是更安全的选择/ clone - 理解这可能会导致性能损失。

无论您选择哪种方式,请使用Javadoc记录您的课程或个人方法的作用。

相关问题