Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if/else块中的Java转换_Java_Design Patterns - Fatal编程技术网

if/else块中的Java转换

if/else块中的Java转换,java,design-patterns,Java,Design Patterns,我试图获取2个值并将它们转换为整数或双精度,但我无法以如下所述的简单方式进行转换,因为变量声明不能在block语句中完成: if (args.get(0) instanceof Integer) { Integer left = (Integer) args.get(0); } else { Double left = (Double) args.get(0); } if (args.get(1) instanceof Integer) { Integer right

我试图获取2个值并将它们转换为整数或双精度,但我无法以如下所述的简单方式进行转换,因为变量声明不能在block语句中完成:

if (args.get(0) instanceof Integer) {
    Integer left = (Integer) args.get(0);
} else {
    Double left = (Double) args.get(0);
}

if (args.get(1) instanceof Integer) {
    Integer right = (Integer) args.get(1);
} else {
    Double right = (Double) args.get(1)
}

return left + right; // this is not allowed
当然,一个简单的解决方案是用尽所有4种组合:

if (args.get(0) instanceof Integer && args.get(1) instanceof Integer) {
    return ((Integer) args.get(0)) + ((Integer) args.get(1));
} else if ...

然而,我假设有一个简单而著名的设计模式可以更雄辩地实现我想要的

您不必用尽所有4个选项,因为其中只有一个选项会产生整数:

Number left = (Number)args.get(0);  // not sure if casting is necessary here
Number right = (Number)args.get(1); // since I don't know the type of your list
if (left instanceof Integer && right instanceof Integer) {
    // if both operands are Integer, return an Integer
    return left.intValue() + right.intValue();
} else {
    // if any of the operands is Double, the result must be Double
    return left.doubleValue() + right.doubleValue();
}

您不必用尽所有4个选项,因为其中只有一个选项会产生整数:

Number left = (Number)args.get(0);  // not sure if casting is necessary here
Number right = (Number)args.get(1); // since I don't know the type of your list
if (left instanceof Integer && right instanceof Integer) {
    // if both operands are Integer, return an Integer
    return left.intValue() + right.intValue();
} else {
    // if any of the operands is Double, the result must be Double
    return left.doubleValue() + right.doubleValue();
}

完美链接:(也相关)为什么不把所有的东西都转换成双倍?@dbugger:因为我想要的是2+3=5,而不是2+3=5。0@Tunaki. 谢谢你的回复。然而,我无法看到你提供的链接如何帮助我的案件。Double和Integer都是从Number派生的,但我不能用二进制运算符将Number的两个实例相加。我错过了什么?我正在做大量的工作,通过根据需要格式化结果来轻松处理。完美链接:(相关)为什么不将所有内容都转换为双精度?@dbugger:因为我想要的是2+3=5,而不是2+3=5。0@Tunaki. 谢谢你的回复。然而,我无法看到你提供的链接如何帮助我的案件。Double和Integer都是从Number派生的,但我不能用二进制运算符将Number的两个实例相加。我遗漏了什么?我正在经历大量的工作,通过根据需要格式化结果,可以轻松地完成一些事情。