ルーチン名を文字列形式で指定すると、ディスパッチするハンドラ ルーチンが約 30 あります。そのため、ファクトリ メソッドでルーチンをディスパッチする自然な方法は、一連のルーチンを使用してif...else
、スロットに収まるようにルーチン名を比較することです。それは機能しますが、ルーチンの数が増えるにつれて、不器用で非効率的であることは間違いありません。
enum と EnumMap を使用する方法を思いつきました。ルーチンを追加するたびに、enum インスタンスを追加し、EnumMap (ルーチン名とルーチン クラスをキーと値として) に登録します。
私が知っているように、インスタンスの数が64 (long 型の長さ)未満の場合、EnumMap の実装は aをビット配列long
として使用し、ビット オフセットを使用してandを実行するため、非常に高速で、O を取得できました。 (1) ルーチンの数が 64 未満である限り、ルーチンをディスパッチしたときのパフォーマンス (私の状況には非常に適しています)。put
get
ただし、EnumMapの制限は、 ではなく ,key type
のみであり、ルーチン name( ) を使用して簡単なルックアップを行うことができませんでした....Enum
String
string
これを回避する方法はありますか? または、キーの値を使用して逆引きを行うことができれば:)