【问题标题】:Comparator as static field - interface or implementation?比较器作为静态字段 - 接口或实现?
【发布时间】:2010-09-17 22:13:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: java interface comparator


    【解决方案1】:

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

    【讨论】:

    • 我正在使用该推理并将其放入 Foo 中,因为 FooImpl 没有任何特定的比较。只是想知道任何需要注意的警告,我能看到的唯一区别是类是可见的,如上所述,这不是问题。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2015-10-25
      相关资源
      最近更新 更多