2

私はすでに「自然な」順序を持っているクラスを持っており、同様に使用できる別のコンパレータを定義したいと考えています。String.CASE_INSENSITIVE_ORDERつまり、必要なときに参照されるインスタンス化された静的フィールドとして定義します。

実際の比較タイプであるインターフェースFoo(そうなるでしょうComparator<Foo>)では、FooImplではなくそこに配置することに賛成です(この特定のケースでは、違いが生じる場合は1つの実装のみ)。Fooはインターフェイスであるため、もちろんクラスがパブリックである必要があることを除いて、Stringクラスと同様の内部クラスを使用して実装されます。

FooではなくFooImplに入れる方がよいかどうか疑問に思います。もしそうなら、なぜですか?また、実装クラスの公開の可視性については気にしませんが、代わりにスタンドアロンの個別のパッケージの可視エンティティである必要がありますか?

4

2 に答える 2

3

インターフェイスに固有の場合は、インターフェイスに配置します。実装に固有の場合は、実装に入れます。それも最も理にかなっています。現在の実装量は関係ありません。とにかく、いつでも独自の実装固有のコンパレータを実装に提供できます。

于 2010-09-17T22:17:45.907 に答える
1

コンパレータはFooImplの外部で使用することを目的としていますか?その場合は、列挙型と同じようにインターフェイスに配置できます。新しいコンパレータを使用するコードのいずれかがFooインターフェイスのみを使用している場合は、FooImplに入れません。

コンパレータを使用するためだけにFooImplについて知る必要はありません。

于 2010-09-17T22:19:04.000 に答える