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

标签 java clone

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

  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/

相关文章:

objective-c - 克隆或复制 UIViewController 或 UIView

java - 程序启动时不显示系统托盘图标

java - Android 将毫秒转换为小时

java - 为 Android 操作系统创建联系人列表提供商?

java - 遍历两个 TreeMap 以在 Java 中进行比较

java - MongoDB 过早到达流末尾

javascript - 在新的 clone() div 中显示隐藏的 div

Java - 理解克隆

java - 如何克隆 ArrayList 并克隆其内容?

java - 如何使用 map 创建类对象的副本?