これは簡単なことかもしれませんが、ちょっと混乱しています。私は自分のアプリケーションでメニューを作成しようとしています。特定の条件によっては、メニューのいくつかのオプションが有効/無効になります。コンソールベースなので、メニューの各「状態」にユーザーが使用できるコマンドを指定することも必要です。いくつかのオブジェクトを列挙型に添付するにはどうすればいいですか?
例:
EMPTY_STATE
がADD_COMMAND, REMOVE_COMMAND, QUIT_COMMAND
FULL_STATE
私は私のアプリケーションは、私は簡単に複数の状態を追加して使用できるコマンドをカスタマイズすることができるという可能性を意味ほど柔軟になりたいADD_COMMAND, VIEW_COMMAND, REMOVE_COMMAND, QUIT_COMMAND
を持ってい。つまり、私はそれが実行されたアクションであることを知るためにifの列を行うことを避けたいと考えます。
各状態には異なるコマンドがあるので、私はこれらの異なる状態をカウントするState
という名前のENUM
を作成すると考えました。 Commands
と呼ばれるENUM
も作成しました。これには、アプリケーションの使用中にユーザーが実行できるすべてのコマンドが含まれています。
私の基本的な考え方は単純だった:、その後、
EMPTY_STATE(Commands.ADD_COMMAND,Commands.REMOVE_COMMAND,Commands.QUIT_COMMAND)
はこのように、国家は、コマンドをcountains、およびコマンドは、コマンドプレフィックス( "-add")の文字列である彼らのラベルを、countains
しかし、国家は多くのコマンドを数えることができ、それが問題です。
EMPTY_STATE(Arraylist array = commands) <-- Just the idea
そして、私の質問はどこに行くことがある:私はとENUM
に各ケースのコンストラクタを行うにはしたくないことはできませんので、私はそれを作る、すべてのコマンドをcountainしまうのArrayListを使用して考えましたドキュメンテーションによると、arraylistは、インターンの内容を割り当てるためにパラメータでコレクションを取ることができます。
これをきれいにして管理しやすくするために、どのように構成するべきかの提案がありますか?
良いアイデアですが、私はenumSetの内部でenum値に簡単に到達できない方法が嫌いです(チェックされていますが、get()と同等のものは見つかりませんでした。元の列挙型の値は毎回です。もし1000のコマンドや状態があったら、問題はあります... –
待っていますか?for for eachループの標準を使うのはどうですか?for(コマンドc:state.associatedEnumSet ()){何でもして...} ' –