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)
但是,我认为有一个简单而着名的设计模式可以实现我更加雄辩的想法.
您不必耗尽所有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)