2016-05-01 42 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

相关问题