問題タブ [enumset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - スプリング フォーム チェックボックス要素から EnumSet を受け取りますか?
このトピックに関するいくつかの関連する質問を見てきましたが、私が求めているものと完全に一致するものはありません。
ユーザーがチェックボックスリスト(列挙型に基づく)から多数のアイテムを選択できるようにし、それをセットとして受け取ることができるようにしたいフォームがあります。私は以下を持っています(例として日を使用)
私の列挙型:
オプションとして表示されるコントローラーのページに列挙値を送信します。
オプションをチェックボックスとして記述し、正しいフォーム フィールドにマッピングします。
フォームをサポートするフォーム オブジェクト:
これは、オプションが正しく表示される限り機能しますが、送信しようとするとエラーが発生します。
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 エラー フィールド 'days' のオブジェクト 'filterForm' のフィールド エラー: 拒否された値 [0,1]; コード [typeMismatch.filterForm.days,typeMismatch.days,typeMismatch.java.util.EnumSet,typeMismatch]; 引数 [org.springframework.context.support.DefaultMessageSourceResolvable: コード [filterForm.days,days]; 引数 []; デフォルトのメッセージ [日]]; デフォルト メッセージ [タイプ 'java.lang.String[]' のプロパティ値をプロパティ 'days' の必要なタイプ 'java.util.EnumSet' に変換できませんでした。ネストされた例外は org.springframework.core.convert.ConversionFailedException: 値 '{0, 1}' の型 java.lang.String[] から型 java.util.EnumSet への変換に失敗しました。ネストされた例外は java.lang.
問題が何であるか、またはこれを達成するためのより良い方法があるかどうか、何か考えはありますか? ありがとう
java - 自分自身で定義された列挙型の使用を子供に強制する
親抽象動物調教師クラスがあるとしましょう:
親動物の調教師の具体的な拡張機能が、それによって定義された訓練可能なもののみの訓練を完了することを望みます。したがって、次のような具体的なドッグトレーナーがあるとします。
の現在の定義では、型のパラメーターに対してDogTrainer
のみ実行できます。しかし、具象を作成する人は誰でも、具象がそれ自体で定義することを許可する必要があることを強制したいと思います。trainingComplete
DogTrainer.Tricks
Trainer
trainingComplete()
Trainables
言い換えれば、私の現在の設計の問題は、次のような別のトレーナーがあった場合です。
犬に警察のトリックを教えようとする別のルージュトレーナーを誰かが定義することを妨げるものは何もありません。
私はこれを禁止し、クラスを拡張して、指定したTrainablesのみを使用できるようにしたいと考えています。
どうやってやるの?
java - パラメータとして EnumSet (異なる型) を持つ同じメソッド名
私は方法Aを持っています
ここで、同じ署名を持つが異なる型の EnumSet を取る新しいメソッド B を書きたいと思います。
私がそれをすると、日食は私に同じ消去のエラーを与えます。この目的を解決する方法はありますか? 前もって感謝します。さらに明確にする必要がある場合はお知らせください。
java - Java:特定のインターフェイスを実装する Enum 定数を受け入れるジェネリック関数を作成する方法は?
だから私はすべてインターフェースを拡張する一連の列挙型を持っています:
次に、インターフェイスを拡張するいくつかの列挙型があります。
このインターフェイスを拡張する列挙型のみを受け入れる関数が必要です。できない:
関数内で、EnumSet.of(input) を使用して EnumSet を作成するためです。私にはできない
関数内で、別の関数に渡す必要がある Map を作成する必要があるためです。キャストなしでこれを行うタイプセーフな方法はありますか?
編集: インターフェイス定義を修正しました。
java - 最新の Java 8 API で EnumSet の代わりにビットフィールドを使用する正当な理由
EnumSet
、それ自体と同じくらい古いenum
(両方とも Java 5 以降) は、ビットフィールドのユースケースの妥協のない代替品であると想定されています。 . 一方、最新の、そして何年にもわたって最も期待されている Java API である Streams API は、恥ずかしがらずにSpliterator
の特性にビットフィールドを採用しています。
上記のことは、Java のコア エキスパートによる明らかな承認であり、EnumSet
結局のところそれほど良くないと考えるべきでしょうか? ビットフィールドを使用しないという一般的なベストプラクティスのアドバイスを再考する必要がありますか?