1

ルーチン名を文字列形式で指定すると、ディスパッチするハンドラ ルーチンが約 30 あります。そのため、ファクトリ メソッドでルーチンをディスパッチする自然な方法は、一連のルーチンを使用してif...else、スロットに収まるようにルーチン名を比較することです。それは機能しますが、ルーチンの数が増えるにつれて、不器用で非効率的であることは間違いありません。

enum と EnumMap を使用する方法を思いつきました。ルーチンを追加するたびに、enum インスタンスを追加し、EnumMap (ルーチン名とルーチン クラスをキーと値として) に登録します。

私が知っているように、インスタンスの数が64 (long 型の長さ)未満の場合、EnumMap の実装は aをビット配列longとして使用し、ビット オフセットを使用してandを実行するため、非常に高速で、O を取得できました。 (1) ルーチンの数が 64 未満である限り、ルーチンをディスパッチしたときのパフォーマンス (私の状況には非常に適しています)。putget

ただし、EnumMapの制限は、 ではなく ,key typeのみであり、ルーチン name( ) を使用して簡単なルックアップを行うことができませんでした....EnumStringstring

これを回避する方法はありますか? または、キーの値を使用して逆引きを行うことができれば:)

4

1 に答える 1