【发布时间】:2022-01-16 16:50:35
【问题描述】:
我有两种方法meth1 和meth2。 meth1 接受集合set1 的输入,返回一个值,同时修改set1。
现在meth2 使用这个set1 来计算另一个返回值。
我在这段代码中看到的问题是集合修改是隐式的,如果编码人员不够小心,可能会错过。
我可以在一个方法中完成所有操作,但是两种方法的工作方式不同,足以将它们放在不同的方法中。单个方法也会很长。
既然我必须在这里使用两种方法,那么避免隐式修改的最佳方法是什么?处理这种情况的最佳做法是什么?
任何指针都非常感谢。
方法签名:
meth1:
private List<CustomObject> meth1(List<CustomObjectOnWhichOperationIsPerformed> lst,
Set<AnotherCustomObject> set1, Map<String, AnotherCustomObject> mp) {
// Iterate on lst, call mp and remove AnotherCustomObject entities from set1
}
meth2:
private List<CustomObject> meth2(Set<AnotherCustomObject> set1) {
// Iterate on set1 to create the list
}
【问题讨论】:
-
集合的变化是否必须在方法 1 之外可见?如果没有,请创建已通过的系列的防御性副本并仅对其进行处理。如果需要在该方法之外进行更改,即结果,那么您基本上有两个选择:1)创建副本并正常返回(您可能需要将当前返回值和集合包装在新的返回类型中)或者 2) 尝试在方法名和参数名中表达参数改变的事实,并添加一些 JavaDoc 来补充细节。
-
是的,需要在方法之外进行更改。所以我也只能想到这些选项。目前正在使用添加 JavaDocs 的第二个选项。
-
你能分享一下这两种方法的一些细节吗,例如他们的签名?这可能有助于提出更具体的建议。
-
@Thomas 当然。将添加签名。
-
您现在可以再添加 2 个内容吗? 1 - 描述
meth1的返回值:它与输入有什么关系,它代表什么以及 2 - 如果可能,添加真实的方法和参数名称,更改它们可能已经有助于传达正在发生的事情(除非你可以' t 分享在这种情况下,您将自己找出一个有意义的名称 - 想想您对某些名称的含义。)
标签: java oop design-patterns