gpt4 book ai didi

java - 日历的防御副本

转载 作者:太空狗 更新时间:2023-10-29 22:37:11 25 4
gpt4 key购买 nike

一直在努力寻找最佳方法来实现制作日历对象的防御性副本的方法。

例如:

public void setDate(Calendar date) {
// What to do....
}

在检查空输入并制作副本时,我特别担心线程的交错,或者我是否遗漏了一些非常明显的东西?

最佳答案

(我猜现在针对的是稍微不同的受众......)

如果我绝对必须使用 Calendar(而不是 Joda Time),我会使用 clone()。您在评论中争辩说您担心“顽皮的子类” - 您建议如何在 any 方案中解决这个问题?如果您对所涉及的子类一无所知,并且不信任它们,那么您将无法保留特定于类型的数据。如果您不相信子类不会把事情搞砸,那么您通常会遇到更大的问题。在执行日期/时间计算时,您如何相信它能够为您提供正确的结果?

clone()expected 克隆对象的方式:这是我希望 sensible 子类 Hook 任何类型的地方-它需要的特定行为。您不需要知道哪些状态位是相关的 - 您只需让类型自己处理即可。

比使用 Calendar.getInstance() 和自己设置属性的好处:

  • 您将保留相同的日历类型
  • 您不必担心忘记属性:这是类型的责任
  • 您明确地说什么您想做什么,并让实现来处理如何,这总是很好的。您的代码准确地表达了您的意图。

编辑:就原始问题所担心的“线程交错”而言:无论其他线程做什么,date 参数的值 都不会改变。但是,如果在您获取防御性副本时另一个线程正在改变对象的内容,那可能很容易导致问题。如果这是一个风险,那么基本上你就会遇到更大的问题。

关于java - 日历的防御副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9224935/

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