2012-02-29 62 views
0

你好,我是后一个更清洁的执行如何检查一个违约倍值,如-1.0删除默认双人或INT

我的字符串实现:

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()); 
    } 

但我不得不为每双/ int值做这个if语句。这是很多重复的代码,我想要把它推到它自己的原子函数中,但除了布尔值之外,我不知道干净的代码会是什么。

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

+0

我不确定您在空或默认值的情况下要做什么。你想在默认值的情况下返回null吗? – nwinkler 2012-02-29 11:34:02

+0

如果他们wrapperObj的值是一个默认值的说-1我不想设置它在obj – Will 2012-02-29 11:42:57

+0

啊,这是有道理的。 – nwinkler 2012-02-29 11:46:53

回答

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(这是...的两倍对象表示),它可以为空。就在这种情况下,您可以创建一个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的没有简单的方式执行,如果某些条件大都会。你可以使用反射,但我认为它是过度的。如果你想要做的是减少你的代码,那么使用一些模板机制没什么意义。

所以...我想出很简单:

  1. 复位相同的值
  2. 设置默认已知值

在第一种情况 - “让价值是“ - 你可以这样做:

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

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

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

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

请记住,如果你的obj.setProperty是一个对象,你可以使用空,否则你是被迫到一些不变的价值。

+0

你的答案解释了如何检查与默认值的相等性,但是如果get方法没有返回默认值,它不能解决仅调用setter方法的问题。 – nwinkler 2012-02-29 11:49:20

+0

没错。然后我会添加一个结论。 – helios 2012-02-29 11:53:29