2016-05-01 74 views
0

我仍然試圖有效地切換類,我想知道這是否可以工作:生成與編譯器生成的「切換字符串」代碼相同的代碼,但使用intern而不是equals。是否所有類名都保證在所有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默認實現所有字符串。但是,您的問題比這更深 - 在單個JVM中,類的名稱不是唯一的。如果同一個類由兩個不同的類加載器加載,那麼在JVM中將有兩個具有相同名稱的類對象實例,但其中的不是彼此相等。如果你想對一個類的切換語義進行建模,那麼你需要一種捕獲這種行爲的方法。

+3

嗯,是的,舊的'不能將javax.servlet.http.HttpServletRequest轉換爲javax.servlet.http.HttpServletRequest' ... – chrylis

+0

好點。我想這意味着:http://stackoverflow.com/a/31671438/693752是最好的方法。最終的測試不能只依賴字符串。 – Snicolas

+0

我留下了問題,因爲我對當前的研究工作有了答案,但問題的範圍更廣。 – Snicolas

相關問題