phpcn_u15822017-06-12 09:21:32
この質問には、文法レベルから見て、サスペンスはありません。 Baidu では、定数と列挙型の違いについて説明します。
しかし、設計の観点から見ると、「静的final」よりも「enum」の方が優れています。
これは少し抽象的なかもしれませんが、例を挙げてみましょう: たとえば、setResponseState というパブリック関数 (より正確にはパブリック メソッド) を定義しました。
1 つは次のように定義されています: setResponseState(String state) { ... }、パラメータとして文字列を使用します。1 つは、パラメータとして列挙を使用して、setResponseState(EnumDemo.State state) { ... } のように定義されています。
最初の定義の正しい呼び出しメソッドは次のとおりです: setResponseState(EnumDemo.SUCCESS);
しかし、次のように呼び出した場合、JAVA 言語の構文に問題はありませんか?
コンパイラーはここでもそれを渡すことができます...しかし、実行時に重大なエラーが発生し、システムの信頼性が低下する可能性があります。
ここでの最大の問題は「関数のパラメータが十分に明確ではない」ことであり、この方法を使用する開発者に迷惑をかけることになります。彼は、最終的にどのパラメータを私に渡すかを決定するために、私のソースコードに戻ってチェックする必要がありました...
そして、この関数 (メソッド) をフレームワーク コードのセットにカプセル化し、ソース コードを提供しない場合、開発者が再度チェックするのはさらに困難になります。これにより、開発効率が低下します。
setResponseState(EnumDemo.State state) { ... } を使用した定義方法は非常に明確です。 SUCCESS、FAIL、または null のいずれか。
開発者がこの関数(メソッド)の呼び出しを間違えることはほとんどなく、ソースコードを確認する必要も全くありません。
したがって、より厳密なアプローチは列挙を使用することです。もちろん、これはパブリック関数(メソッド)を定義する場合です。
そして、setResponseState がプライベート関数 (メソッド) である場合は、もう少しカジュアルに文字列パラメータを使用することができます。この「厳密さの欠如」は内部的にのみ露出する必要があります。
より印象的にするには、外部的には非常にプロフェッショナルであるように見せる必要がありますが、内部的には基準を少し下げることができます。
これらは定数と列挙型の 2 つの異なるアプリケーション シナリオです。お役に立てば幸いです...
世界只因有你2017-06-12 09:21:32
簡単に言えば:
static final
のみが定数を定義する方法です。 後者は異なりますが、機能的には似ています。どちらを使用するかはニーズによって異なります
詳細:
投稿アドレス:
Java言語におけるEnum型の使い方の紹介
Java列挙型(enum)の紹介