为避免副作用:
我不想在我的方法中更改pramaeter对象的属性值。我更喜欢创建一个新的代表结果并将其返回的结果。
避免副作用仅在多线程环境中才是真正重要的,但仍然是良好的实践。 f(X)= Y,可以比较两个对象,一个u作为参数接收,另一个u作为结果比较好。
这意味着,我需要将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/