System
ライブラリset
とメソッドの詳細を読んでget
いますが、パラメーターは通常文字列です。
が含まれているため、パラメーターとしての使用はString
悪い習慣だとenum
思いますか?
少なくともより良い代替案はpublic final String
、いいえ?
列挙型は文字列よりも優れたアプローチであると考えています。それらはタイプ セーフであり、文字列を比較するよりも高速に比較できます。
Java 1.5 より前の代替手段として、Joshua Bloch が著書『Effective Java』で提案したタイプ セーフな列挙型パターンを使用できます。タイプ セーフな列挙型については、http: //www.javacamp.org/designPattern/enum.html も参照してください。
パラメータのセットが制限されており、コンパイル時に既知である場合は、enum
.
パラメーターのセットが開いていて、コンパイル時に不明な場合は、文字列を使用します。
パラメータとしてメソッドに渡されると予想されるものとしてa を宣言したからとpublic final String
いって、私が好きなものを渡すことを妨げるものは何もありません。
sを使用enum
すると、渡すオブジェクトを独自に作成できず、問題の両側を保護できなくなります。列挙型の代わりに定数文字列を使用する必要があると私が考えることができるのは、ユーザーがメソッドを拡張してカスタム機能を有効にする余地を与える必要がある場合だけです...
列挙型の使用はタイプセーフですが、列挙型を文字列に、またはその逆に変換する必要が非常に頻繁にあります。そして、Javaでそれを行うための組み込み機能はありません。そして、最終的にはvalueOf()とtoString()を使用することになります。そして、そのアプローチを使用することは、文字列だけを使用することと大差ありません。文字列を列挙型に変換できない状況を処理する必要があるためです。
したがって、静的な最終文字列を使用するだけで簡単であり、一般的な方法であるAFAIKです。
たとえば、APIを使用してサーバーと対話する必要があります。すべてのメソッドと応答を列挙型として定義する必要があります。次に、toStringメソッドとvalueOfメソッドを追加する必要があります。なぜ文字列を使用しないのですか?
System.setProperty()、System.getProperty()、またはSystem.getenv()を参照している場合、可能なキーのセットが開いているので、ここでは文字列が適切だと思います。keyパラメータは、ファイルまたはストアの実際のテキスト/文字列型の値に対応します。
閉じたキーのセットがある場合は、列挙型の方がはるかに望ましいと思います。
「驚きを最小限に抑える方法」を学びました。本能的に、列挙型を使用することは正しいことです。だから私はそれのために行きます。Java メーカーも同じように考えているに違いありません。
編集: POLS の優れた説明: http://benpryor.com/blog/2006/06/29/api-design-the-principle-of-least-surprise/
既存のAPIで文字列を使用することは悪い習慣ではありません。Javaが列挙型をサポートするようになったという理由だけでAPIを変更することは悪い習慣です。新しいAPIについては、他のみんなが言ったことに同意します。