Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
7年前关闭。
Improve this question
每当我看到一个方法是参数之一时,就会像output parameter
我感觉这完全是错误的。从我的角度来看,参数通常应该是不可变的,并且不能在方法内更改。例如,上述方法可以重写为
然后可以将返回的
这个假设正确吗?还是两个版本都可以接受?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
7年前关闭。
Improve this question
每当我看到一个方法是参数之一时,就会像output parameter
void addTokenErrorsToReport(List<String> tokens, Map<String, Integer> report)
我感觉这完全是错误的。从我的角度来看,参数通常应该是不可变的,并且不能在方法内更改。例如,上述方法可以重写为
Map<String, Integer> createTokenErrorsReport(List<String tokens)
然后可以将返回的
Map
与原始报告Map合并。这个假设正确吗?还是两个版本都可以接受?
最佳答案
与大多数事情一样,如果它导致功能不良/不可读/难以维护的代码,或者您不知道为什么这样做,则只是“不好的做法”。
在大多数情况下,使用输出参数不会产生这些影响。
在您的addTokenErrorsToReport中,这当然是一种适当的方法。您正在向报告中添加 token 错误-函数需要知道要添加的 token 以及要添加到的报告。该功能显然可以精确地执行其设计要执行的操作,而没有任何缺点。
如果要使用createTokenErrorsReport方法,则必须通过在现有报告中插入新标记来跟踪对它的每次调用。如果将标记添加到现有报告中是常见的操作,那么绝对有必要添加一种方法。这并不是说createTokenErrorsReport也不应存在-如果从 token 列表创建新报告是一项常见操作,那么您将需要执行此操作的函数。
很好地使用输出参数的一个很好的例子是Collections.sort
,它可以对列表进行适当排序。避免了创建列表的新副本并返回排序后的副本对性能的影响,同时,如果您愿意的话,它也不会限制您创建副本和对副本进行排序。
只需使用最好的工具来完成工作,并保持代码简洁即可。