彼らはバイトコードに必要な命令を実装していなかったので、コードがどれほど「本番環境に対応」していても、それほど多くのケースを書きたくないのです...
[編集:この回答へのコメントから抽出し、背景にいくつかの追加を加えた]
正確には、2³²は多くの場合であり、それ以上を保持するのに十分な長さのメソッドを持つプログラムは、まったく恐ろしいものになります。任意の言語で。(どの言語のどのコードでも、私が知っている最長の関数は6k SLOCを少し超えています-はい、それは大きいです-switch
そしてそれは本当に管理不能です。)次に、2つの実際の選択肢があります。long
int
をに圧縮するには、ハッシュ関数をテーマにしたいくつかのバリアントを使用long
しint
ます。タイプを間違えた場合にのみ使用する最も簡単な方法は、キャストすることです。これを行うと、より便利になります。
(int) ((x&0xFFFFFFFF) ^ ((x >>> 32) & 0xFFFFFFFF))
結果をオンにする前に。テスト対象のケースを変換する方法も検討する必要があります。しかし、実際には、それは多くの場合の本当の問題に対処していないので、それでも恐ろしいです。
非常に多くのケースで作業している場合のはるかに優れた解決策はMap<Long,Runnable>
、特定の値をディスパッチする方法を調べているように、または類似のものを使用するように設計を変更することです。これにより、ケースを複数のファイルに分割できます。これにより、ケース数が多くなると管理がはるかに簡単になりますが、関連する実装クラスのホストの登録を整理するのはより複雑になります(注釈を付けると役立つ場合があります)登録コードを自動的に作成します)。
FWIW、私はこれを何年も前に(プロジェクトの途中で新しくリリースされたJ2SE 1.2に切り替えました)、超並列ハードウェアをシミュレートするためのカスタムバイトコードエンジンを構築しました(いいえ、JVMの再利用は根本的に適切ではなかったでしょう)さまざまな値と実行モデルが関係しています) switch
、Cバージョンのコードが使用していたビッグに比べてコードが大幅に簡素化されました。
持ち帰りのメッセージを繰り返すと、switch
aをオンにしたいというlong
ことは、プログラムのタイプが間違っているか、クラスを使用する必要があるほど多くのバリエーションを含むシステムを構築していることを示しています。どちらの場合も、再考する時が来ました。