为了避免副作用: 我不想在我的方法中更改 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());
但这最终将导致访问数据库和更多处理。
是否有一些使用反射的通用方法将一个对象映射到另一个对象?这在性能方面代价高昂。
你会选择什么?根据项目需要而定。考虑到可维护性、可扩展性......
最佳答案
- 您可能想看看Cloneable和
Object.clone()
。如果对象的浅拷贝就足够了,那么您不需要编写任何额外的代码。Object.clone()
将为您完成此操作。 - 确保您确实想要/需要这种方法。如果您不确定否则会发生什么/是否会产生副作用,请检查您的代码以找出答案。
- 保持一致。不要在实现中混合复制和修改操作。
- 考虑一下如果将来您或某人想要使用您的
GroundCertificate
的后代,需要做什么。
关于java - 如何避免副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919468/