比较器作为静态字段 - 接口还是实现?

时间:2010-09-17 22:13:21

标签: java interface comparator

我有一个已经具有'自然'顺序的类,并希望定义一个可以类似于String.CASE_INSENSITIVE_ORDER使用的不同比较器 - 即,将其定义为需要时引用的实例化静态字段

使用接口Foo作为实际比较类型(它将是Comparator<Foo>),我赞成将它放在那里而不是FooImpl(在这种特定情况下只有一个实现,如果这有所不同)。它是使用类似于String 1的内部类实现的,当然该类必须是公共的,因为Foo是一个接口。

想知道将它放在FooImpl而不是Foo中是否更好,如果是这样,为什么?此外,我不关心实现类的公共可见性,但它应该是一个独立的单独包可见实体吗?

2 个答案:

答案 0 :(得分:3)

如果是特定于界面,请输入界面。如果它是特定于实现的,则付诸实施。这也是最有意义的。当前的实现量无关紧要。无论如何,你总是可以提供一个实现它自己的特定于实现的比较器。

答案 1 :(得分:1)

比较器是否打算在FooImpl之外使用?如果是这样,你可以像在enum中一样将它放在界面中。如果使用新比较器的任何代码仅使用Foo接口,我不会把它放在FooImpl中。

他们不应该仅仅为了使用比较器而了解FooImpl。