所以我总是被告知修改方法的参数是不好的做法(至少当它不直观时)。通常我会使用简单的东西,例如:
public Type method(Type Object) {
Type otherObject = Object.clone();
// do stuff to otherObject
return otherObject;
}
这是我经常做的事情,尽管很少做。有更好的方法来做到这一点吗? 例如,一种使 java 按值传递而不是按引用传递的方法,以便修改参数不会对我的类的用户产生不可预见的后果。 除了不太清楚(某种程度)之外,克隆方法大概在 O(n) 时间内运行,所以不必这样做会很好。
谢谢!
最佳答案
从安全角度来看(这通常让我们保持诚实),克隆
通常是错误的做法(HttpCookie
除外 - 它是可变的,但最终
)。如果该对象有一个不可靠的实现,您也会复制它。
你能做的最好的事情就是使Type
不可变。问题就消失了。无需复制。
如果它是一个可变值,只需构造一个副本 - new Type(object)
或其他。请记住,应在检查对象内容是否有效之前完成复制,以避免检查时间到使用时间错误(TOCTOU/TOC2TOU)。
关于Java:修改参数时使用 .clone() 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380796/