2016-05-01 6 views
0

私はまだクラスを効率的に切り替えようとしていますが、これがうまくいくかどうか疑問に思っています。コンパイラが生成した "文字列の切り替え"コードと同じコードを生成します。関連すべてのクラス名はすべてのJVMで使用できますか?

Why can't we switch on classes in Java 7+?

+0

スイッチでクラス名を使用するには、文字列リテラルを使用する必要があります。そのため、これらは文字列定数プールにあります。したがって、クラス名が自動的に保持されない場合でも、スイッチの結果としてクラス名が保持されます。 –

+0

XYの問題のように聞こえます。どうして? – chrylis

+0

@AndyTurnerは必ずしもそうではありません。http://stackoverflow.com/a/31671438/693752 – Snicolas

答えて

4

私はあなたがこの種のアプローチとのトラブルに巻き込まれる可能性が疑われます。簡単な答えは、JVMがデフォルトですべてのStringをインターンするということです。しかし、あなたの問題はそれよりはるかに深刻です。クラスの名前は、単一のJVM内で一意ではありません。同じクラスが2つの異なるクラスローダーによってロードされている場合、JVM内に同じ名前を持ち、ではないでないクラスオブジェクトの2つのインスタンスが存在します。クラスの切り替えのセマンティクスをモデル化するには、その動作をキャプチャする方法が必要です。

+3

ああ、はい、古い 'はjavax.servlet.http.HttpServletRequestをjavax.servlet.http.HttpServletRequest'にキャストできません... – chrylis

+0

良い点。私はそれがそれを意味すると思います:http://stackoverflow.com/a/31671438/693752は、最良のアプローチです。最終テストは文字列のみに依存することはできません。 – Snicolas

+0

私は私の現在のreseach仕事のための答えを得たとして私は質問を開いたままにしますが、質問はより広い範囲を持っています。 – Snicolas

関連する問題