在标题中查看问题!你会'注入'或更确切地说'新'比较器吗?如果元素的顺序在规范中设置并且可能不会改变,你会新建它吗?
答案 0 :(得分:3)
问题“我应该注入这种依赖吗?”是真的“引用对象应该知道这种依赖的本质吗?”。呃,只是否定了。
如果你的班级是FastestPonyFinder
,并且需要按速度排序List<Pony>
,那么我会说它应该知道比较器。比较器需要按速度进行比较,最快速地排序到列表的头部;没有其他比较器适合这项工作。该对象应该创建比较器,就像创建List
。
如果你的班级是BestPonyFinder
,那么它可能应该注入比较器,因为“最佳”构成的定义可以与如何找到符合它的小马的定义分开。这将使您的代码更容易测试,并且将来更容易更改。
答案 1 :(得分:1)
关于比较器的事情是它们便宜。它们通常不具有任何字段,如果它们存在,则它们没有很多字段。
它们非常便宜,并不重要。您可以内联构建它们,或者从静态最终字段中获取它们,或者进行单例注入 - 谁在乎?
答案 2 :(得分:0)
此外,如果没有状态,则可以随时“重复使用”。在这种情况下,它们是线程安全的,并且不会进入先前使用的状态。所以它最终真的取决于你如何实现比较器:有状态还是没有状态。
答案 3 :(得分:0)
为了更好地进行单元测试以获得Comparator的新实例,但是如果比较器只是实现比较方法则无关紧要。如果你想把一些数据作为状态注入比较器并且它可以改变使用Before和After测试方法,以确保你没有使用以前的上下文。