gpt4 book ai didi

Java:修改参数时使用 .clone() 的替代方案?

转载 作者:行者123 更新时间:2023-12-01 15:32:45 24 4
gpt4 key购买 nike

所以我总是被告知修改方法的参数是不好的做法(至少当它不直观时)。通常我会使用简单的东西,例如:

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com