2

私が取り組んでいる Java パッケージで呼び出されるインターフェースを定義したいのTagですが、衝突の問題があるため、そのような普通の名前を使用することをためらっています。(たとえば、特定の名前を持つクラスまたはインターフェースを 1 つだけインポートできます。同じ名前を共有するものが複数ある場合は、そのうちの 1 つに対してインポートを使用できますが、残りはパッケージ名全体で明示的に参照する必要があります。例: com.yoyodyne.games.outdoors.Tag)

また、より詳細な名前もありません (StackOverflow の投稿や他のオンライン Web サイトのタグのようなタグを表すはずです)。私が考えることができる最も近いものは、おそらく TaxonomyTag です。

これに対処するための戦略はありますか?私が考えることができる唯一の方法Collectionsは、 public interface を含む静的クラス ( など)を定義するTagことです。たとえば、それを呼び出すと、Tag を Taxonomy.Tag としてTaxonomyインポートTaxonomyして参照できますが、それはあまり役に立ちません。 .

編集:この衝突の広く知られている例の 1 つは、 ca.odel.glazedlists.matchers.Matcherjava.util.regex.Matcherです。これは、GlazedLists ライブラリで正規表現を使用しようとしている場合に面倒です。

4

8 に答える 8

10

クラスTagの命名に問題はありません。あなたのパッケージ名はそれを普遍的にユニークにします、そしてそれはパッケージの目的の1つです-名前の衝突を解決するために。

Java API内でも、同じ名前の複数のクラスがあります。たとえば、java.util.Date、java.sql.Dateなどです。コードで両方が必要な場合は、完全修飾名を使用してください。

于 2009-05-04T17:26:13.020 に答える
1

このクラスを利用する人は何人ですか?汎用ライブラリを意図している場合は、衝突を避けるために、あまり一般的でない名前を使用します。それがあなただけであり、あなたが本当に弾丸を噛まないで、今のところ完全に修飾された名前で行くなら。

パッケージをリリースする前に問題が発生した場合は、新しい名前にリファクタリングするだけです。

同様の状況で、FQNの使用が嫌いなため、短いクラス名の代替名を見つけました。JasonSTagのようなものでも、一時的な修正として機能します。そのようにリリースしないでください。多くの場合、実装の途中で、クラスを説明するためのより良い方法を見つけます。これは、「タグ」よりもわかりやすいものです。

于 2009-05-04T17:28:08.430 に答える
1

あなたは怠け者ですか?あなたのクラスがインポートを使用していて、あなたのコードを読んでいる誰かが一瞬でも「タグ」を誤解する可能性がある場合は、パッケージの命名規則にもかかわらず、より良い名前を考える価値があります。ネーミングの力を過小評価しないでください---またはクラスの変更に伴う名前の変更。

于 2009-05-04T20:02:59.057 に答える
0

私はこれにはあまり関心がありません。

気にする必要があるのは、クラス/インターフェース名がコードの実際の動作とどの程度一致しているかです。クラス/インターフェースが何をするか、および/またはモデル化することを意図していることを簡潔に説明している場合Tag、それは素晴らしい名前だと思います。

同じクラスでこの型を、異なるパッケージで宣言されたTag他の型と一緒に使用している状況を実際に確認することはできません。Tagただし、必要な場合は、他のTagタイプを完全修飾名で参照するのはそれほど面倒ではありません。

何かに名前を付けることは、物事を便利にすることよりも優れていると思います。

于 2009-05-04T17:26:37.560 に答える
0

最善の戦略は、1つのことをうまく行うクラスを作成することです。これらのクラスは最小限のインポートを必要とするため、インポートステートメントを減らすことができます。

標準のタグインターフェイスを探しました。1つはjava.swing..htmlに、もう1つはサーブレットAPIの奥深くに、もう1つはタペストリーライブラリにあります。クラスがこれらのいずれか(または同様のAPI)を直接使用してはならないので、名前空間の汚染を恐れないかもしれません。

他の解決策は、タグに使用されるオブジェクトのプレフィックスを付けることです。例:ArticleTag。ただし、オブジェクト名は慎重に選択する必要があります。または、とにかく、後でいつでもリファクタリングできます。

于 2009-05-04T17:27:48.960 に答える
0

一般に、「普通の」響きの名前であっても、競合の数は少ないです。パッケージのコンテキスト内で意味のある名前を選択しました。

接頭辞として会社名を付けるような「ばかげた」ことはしないでください。例:YoYoDyneTag。

于 2009-05-04T17:28:37.320 に答える
0

最近、形容詞/副詞をインターフェイス名として使用するのは時代遅れになっていますが、あなたの場合、「Tagable」または「TaxonomyTagable」を使用してもそれほど悪くはありません。

于 2009-05-04T18:10:12.807 に答える
0

これは、単一のクラスで同じ名前の複数のクラスを使用する必要がある場合にのみ問題になる傾向があります。例: java.awt.List と java.util.List、java.util.Date と java.sql.Date。

標準の Java ランタイムで既に使用されているものから離れていれば、ほとんど問題はありません。

何をするにしても、適切でわかりやすい名前を選択してください。これは特に公開 API の場合に当てはまります。あなたは永遠に彼らと一緒に暮らすでしょう。

于 2009-05-04T19:04:29.040 に答える