gpt4 book ai didi

java - 如何避免副作用?

转载 作者:行者123 更新时间:2023-12-01 15:41:55 25 4
gpt4 key购买 nike

为了避免副作用:我不想在我的方法中更改 pramaeter 对象属性值。我更喜欢创建一个新的来表示结果并返回它。

避免副作用仅在多线程环境中才真正重要,但仍然是一个好的实践。 f(X)=Y ,能够比较两个对象,即您收到的作为参数的对象和您给出的作为结果的对象,这是一件好事。

这意味着,我需要将 IN 参数对象中的所有属性映射到创建的 OUT 新实例对象。这将生成一些如下代码:

groundCertResult.setExpirationDate(pGroundCertificate.getExpirationDate());
groundCertResult.setValidationDate(pGroundCertificate.getValidationDate());
groundCertResult.setId(pGroundCertificate.getId());

它可以在我的方法中生成很多行:$

我也可以不映射那么多值,只需添加一行

//use findByID without mapping that much 
final GroundCertificate groundCertResult =
groundCertificateDao.findById(pGroundCertificate.getId());

但这最终将导致访问数据库和更多处理。

是否有一些使用反射的通用方法将一个对象映射到另一个对象?这在性能方面代价高昂。

你会选择什么?根据项目需要而定。考虑到可维护性、可扩展性......

最佳答案

  1. 您可能想看看CloneableObject.clone()。如果对象的浅拷贝就足够了,那么您不需要编写任何额外的代码。 Object.clone() 将为您完成此操作。
  2. 确保您确实想要/需要这种方法。如果您不确定否则会发生什么/是否会产生副作用,请检查您的代码以找出答案。
  3. 保持一致。不要在实现中混合复制和修改操作。
  4. 考虑一下如果将来您或某人想要使用您的 GroundCertificate 的后代,需要做什么。

关于java - 如何避免副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919468/

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