2

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

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

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

4

2 回答 2

3

如果是特定于接口的,则放入接口。如果它是特定于实现的,则将其付诸实施。这也是最有意义的。当前的实现数量无关紧要。无论如何,您始终可以提供一个实现它自己的特定于实现的比较器。

于 2010-09-17T22:17:45.907 回答
1

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

他们不需要知道 FooImpl 只是为了使用比较器。

于 2010-09-17T22:19:04.000 回答