【问题标题】:From If statement to Switch statement in Java [duplicate]Java中从If语句到Switch语句[重复]
【发布时间】:2015-03-08 18:53:14
【问题描述】:

有没有用Java写switch语句中的这段if语句?

Object obj;
if (obj instanceof Integer){

}

if (obj instanceof Double){

}

....

这只是一个例子。 Double 中的 Integer 可以替换为任何其他对象类型

【问题讨论】:

  • 您能举个例子吗?非常感谢!
  • @manouti 但这与多态的instanceof 不同。
  • @RealSkeptic 你是对的。顺便说一句,this question 可能会有所帮助。
  • OP:通常,instanceof 条件链表明类设计不佳。也许您应该告诉我们您为什么需要这个,以便我们可以建议对设计进行更改。
  • 我想这个问题之前已经回答过了:stackoverflow.com/questions/5579309/switch-instanceof

标签: java if-statement switch-statement


【解决方案1】:

在Java的switch语句中,到底有没有这种if语句?

不是合理,不,因为 Java 中的 case 标签必须是常量。 (几乎所有具有switch 的语言都是如此,JavaScript 是一个罕见的例外。)您可能最好使用现有的,但使用if/else 而不仅仅是if

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

但是,您可以这样做(从 Java 7 或更高版本开始),但只是因为您要测试的特定类,它们是 @ 987654326@,所以我们不必担心子类。

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

不建议这样做,因为它会做不必要的工作,并且在一般情况下无法正常工作(例如,如果您正在测试接口或类可以被子类化)。

【讨论】:

  • 如果方法在 if 代码块中返回则无用
  • @user4182277:“如果”是执行词;问题中没有任何内容表明它确实如此。
  • 我的意思是 else 在这里没有必要。移动键盘鸭子。无论如何作者应该考虑做一些重构工作。
【解决方案2】:

没有。你看,switch 语句用于将许多相同类型的不同值与某个其他值进行比较。

switch 语句是这样形成的:

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

它只允许与常量值进行比较,因此对数据类型毫无用处。为此目的,if 语句是更好的选择,因为使用 switch 语句(获取实例名称并以该格式进行比较)的唯一解决方案是编写过多的额外(和不必要的)代码,这些代码不需要并且可以以另一种方式更容易完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多