if / else块中的Java转换

时间:2016-05-06 17:53:39

标签: java design-patterns

我试图获取2个值并将它们转换为Integer或Double,但我无法以如下所述的简单方式执行此操作,因为变量声明无法完成在块声明中:

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 ...

然而,我认为有一种简单而着名的设计模式可以更加雄辩地实现我想要的东西。

1 个答案:

答案 0 :(得分:5)

您不必耗尽所有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();
}