原始双
double
作为原始类型不能保持空值。它只能保持-1.0,0.0,甚至NaN(一个特殊的浮点值,但我不太确定它的行为)。
因此,您无法检查原始变量double
变量是否为空。
反正你可以这样做:
public static double notNaN(double value, double defaultValue) {
return Double.isNaN(value)? defaultValue: value;
}
在的java.lang.Double中
情况下,如果你的属性是Double
(这是...的两倍对象表示),它可以为空。就在这种情况下,您可以创建一个defaultValue检查器方法。
public static double notNull(Double doubleObj, double defaultValue) {
return doubleObj == null? defaultValue: doubleObj.doubleValue();
}
// use this way (getPropertyDouble() returns a java.lang.Double)
notNull(myObj.getPropertyDouble(), -1.0);
你的检查
如果if(o == null)
工作,那是因为你的JavaØ基本的double转换为java.lang.Double中,使一个对象比较(检查此autoboxed双为空...但盒装原始值始终是存在的对象)。为对象
检查值
如果你有一个Double对象,并要检查它的价值,我应该建议:
doubleObj.equals(Double.valueOf(1.0D));
是:比较
- 使用
equals
:你不想比较对象引用,但是需要对象内部的值。
- 与另一个Double对象进行比较:这就是为什么我写了Double.valueOf(1.0D)来显式地填充值。
设置属性
不幸,在Java中的引用传递的方法的另一种方法B,以B的没有简单的方式执行,如果某些条件大都会。你可以使用反射,但我认为它是过度的。如果你想要做的是减少你的代码,那么使用一些模板机制没什么意义。
所以...我想出很简单:
- 复位相同的值
- 设置默认已知值
在第一种情况 - “让价值是“ - 你可以这样做:
obj.setProperty(notNull(objWrapper.getProperty(), obj.getProperty()));
在这段代码中你总是设置的值。如果objWrapper有一个空值(或任何你检查的),设置为obj的值将是它自己的当前值。
在第二种情况 - “如果没有设置好的使用默认” - 你可以这样做:
obj.setProperty(notNull(objWrapper.getProperty(), HERE_GOES_YOUR_DEFAULT_VALUE));
请记住,如果你的obj.setProperty是一个对象,你可以使用空,否则你是被迫到一些不变的价值。
我不确定您在空或默认值的情况下要做什么。你想在默认值的情况下返回null吗? – nwinkler 2012-02-29 11:34:02
如果他们wrapperObj的值是一个默认值的说-1我不想设置它在obj – Will 2012-02-29 11:42:57
啊,这是有道理的。 – nwinkler 2012-02-29 11:46:53