删除默认的Double或int

时间:2012-02-29 11:18:32

标签: java

您好我是在更清楚地实现如何检查默认的加倍值,例如-1.0

我对字符串的实现是:

    private static String stringNullChecker(String o)
{
    if(o == null || o.equals("?") || o.equals(""))
    {
        return null;
    }
    else
    {
        return o;
    }
}

所以我可以按如下方式调用它:

obj.setExDestination(stringNullChecker(wrapperObj.getExchange()));

但是,如果我尝试使用双精度数,它将抛出空指针错误。

所以目前正在实施:

        if(doubleNullChecker(wrapperObj.getPrcCcy()) != null)
    {
        obj.setSettlCurrFxRate(wrapperObj.getPrcCcy());
    }

但我必须为每个double / int值执行此If语句。这是很多重复的代码,我想要把它推到它自己的原子函数中,但除了布尔值之外我不知道什么是干净的代码。

基本上我只想设置值,如果它有非默认值。

1 个答案:

答案 0 :(得分:0)

原始双重

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(它是...对象表示为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并进行对象比较(检查这个自动装箱的double是否为null ...但是盒装原始值总是存在的对象)。

检查对象的值

如果您有Double对象并且想要检查它的值,我应该建议:

doubleObj.equals(Double.valueOf(1.0D));

是:

  • 使用equals进行比较:您不想比较对象引用,而是比较对象内的值。
  • 与另一个Double对象进行比较:这就是我编写Double.valueOf(1.0D)的原因,以明确显示值。

设置属性

不幸的是,在Java中没有通过引用另一个方法B传递方法A的简单方法,以便在某些条件下B执行A.你可以使用反射,但我觉得它太过分了。如果您想要做的就是减少代码,那么使用一些模板机制没有多大意义。

所以...我想出的只是:

  1. 重置相同的值
  2. 设置默认已知值
  3. 在第一种情况下 - “让值保持原样” - 你可以这样做:

    obj.setProperty(notNull(objWrapper.getProperty(), obj.getProperty()));
    

    在此代码中,您始终设置值。如果objWrapper有一个空值(或你检查的任何值),设置为obj的值将是它自己的当前值。

    在第二种情况下 - “如果没有设置使用默认值” - 你可以这样做:

    obj.setProperty(notNull(objWrapper.getProperty(), HERE_GOES_YOUR_DEFAULT_VALUE));
    

    请记住,如果您的obj.setProperty是一个对象,您可以使用null,否则您将被强制为某个常量值。