if/else块中的Java转换

ste*_*tla 1 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
Run Code Online (Sandbox Code Playgroud)

当然,一个简单的解决方案是耗尽所有4种组合:

if (args.get(0) instanceof Integer && args.get(1) instanceof Integer) {
    return ((Integer) args.get(0)) + ((Integer) args.get(1));
} else if ...
Run Code Online (Sandbox Code Playgroud)

但是,我认为有一个简单而着名的设计模式可以实现我更加雄辩的想法.

shm*_*sel 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();
}
Run Code Online (Sandbox Code Playgroud)