2015-03-08 99 views
-4

反正有没有在Java中写这段if语句的语句在switch声明中?从Java中的If语句到Switch语句

Object obj; 
if (obj instanceof Integer){ 

} 

if (obj instanceof Double){ 

} 

.... 

这只是一个例子。的DoubleInteger可以由任何其他对象类型

+0

您能举个例子吗?非常感谢! – 2015-03-08 18:56:23

+2

@manouti但是这与'instanceof'是多态的不一样。 – RealSkeptic 2015-03-08 18:56:27

+0

@RealSkeptic你是对的。顺便说一句,[这个问题](http://stackoverflow.com/questions/5579309/switch-instanceof)可能会有所帮助。 – manouti 2015-03-08 18:58:51

回答

2

更换反正是有写这篇文章if语句的switch语句在Java中?

合理,没有,因为case标签在Java中必须是常量。 (这是有switch,JavaScript的是一个罕见的例外,几乎所有的语言真实的。)你可能最好关闭与你有什么,但if/else而不仅仅是if

if (obj instanceof Integer){ 
    // ... 
} 
else if (obj instanceof Double){ 
    // ... 
} 

但是,你可以这样做(从Java 7或更高版本开始),但仅限于,因为您正在测试的具体类为,它们是final,因此我们不必担心子类。

switch (obj.getClass().getName()) { 
    case "java.lang.Integer": 
     // ... 
     break; 
    case "java.lang.Double": 
     // ... 
     break; 
} 

不建议因为它确实不必要的工作,并将无法​​正常在一般情况下(例如,如果你的接口或类测试,可以被继承)工作。

+0

不是有用的,如果方法,如果代码块 – user4182277 2015-03-08 19:01:35

+0

@ user4182277返回:“如果”是最关键的词;在这个问题中没有任何暗示它确实如此。 – 2015-03-08 19:02:29

+0

我的意思是在这里没有必要。移动键盘鸭子。无论如何,作者应该考虑做一些重构工作。 – user4182277 2015-03-08 19:09:21

0

不可以,您可以看到,switch语句用于比较同一类型的许多不同值以匹配某个其他值。

switch语句形成这样的:

switch (var){ 
    case 5: 
    //var == 5 
    break; 
    case 10: 
    //var == 10 
    break; 
    default: 
    //var is not 5 nor 10 
    break; 
} 

只允许比较为恒定值,因此使得向数据类型没用。 if语句对于此目的来说是更好的选择,因为使用switch语句(获取实例名称并以此格式进行比较)的唯一解决方案将会写入太多额外(并且不必要)的代码,这些代码不是必需的,并且可以更容易以另一种方式完成。