2012-02-29 3 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())); 

しかし、同じものを2倍で試してみると、NULLポインタエラーが発生します。

ので、実装は現在、次のとおりです。

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

しかし、私はすべてのダブル/ int型の値に対して、このIf文を実行するために抱えています。これは繰り返しコードがたくさんありますが、これを自分自身の原子的な機能にしたいと思っていますが、ブーリアン以外のコードではクリーンなコードが駄目です。

基本的には、デフォルト以外の値が設定されている場合にのみ値を設定します。プリミティブ型として

+0

ヌル値またはデフォルト値の場合に何をしようとしているのか分かりません。デフォルト値の場合はnullを返しますか? – nwinkler

+0

wrapperObjの値がデフォルト値の-1である場合objに設定したくありません – Will

+0

ああ、意味があります。 – nwinkler

答えて

0

プリミティブダブル

doubleはNULL値を保持することはできません。 -1.0,0.0、またはNaN(特別な浮動小数点数)を保持することしかできませんが、その動作についてはあまりよく分かりません。

プリミティブdouble変数がnullであるかどうかを確認することはできません。

とにかく、あなたがこれを行うことができます:あなたの特性がDoubleている場合、それは(それが...ダブルのオブジェクト表現である)java.lang.Doubleの

の場合

public static double notNaN(double value, double defaultValue) { 
    return Double.isNaN(value)? defaultValue: value; 
} 

はnullです。この場合、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がjava.lang.Doubleのに二重のプリミティブあなたのOを変換し、これは二重のautoboxed nullの場合、オブジェクトの比較(チェック作るからだと動作する場合は...しかし、 boxedプリミティブ値は常に存在するオブジェクトです)。あなたはDoubleオブジェクトを持っており、それが価値だ確認したい場合は、オブジェクトのための

チェック値は

私がお勧めする必要があります

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

それは次のとおりです。比較のため

  • 使用equals :オブジェクト参照を比較するのではなく、オブジェクト内の値を比較する必要があります。
  • 他のDoubleオブジェクトと比較する:そのため、値を明示的にボックスに入れるためにDouble.valueOf(1.0D)を書きました。 Bするために、別の方法Bを参照して方法Aを通過する簡単な方法はありません

    不幸Javaでは、もし、いくつかの条件メッツAを実行するプロパティを設定

。あなたは反射を使うことができますが、それは残念です。あなたがしたいことがあなたのコードを減らすことであるならば、いくつかのテンプレート機構を使うのはあまり意味がありません。だから、

...私が思い付くことは単純です:

  1. は、最初のケースでは、デフォルト知ら値

を設定

  • 同じ値をリセット - 」としての価値を聞かせてあなたはできます:

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

    このコードでは、常に値を設定します。 objWrapperがnull値(またはチェックした値)を持つ場合、objに設定する値は独自の現在の値になります。第2のケースで

    - 「使用デフォルトsettedない場合は」 - あなたが行うことができます:

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

    あなたobj.setPropertyがオブジェクトである場合はnullを使用できることに注意してください、そうでなければ、強制されます一定の値まで

  • +0

    あなたの答えは、デフォルト値と等しいかどうかをチェックする方法を説明していますが、getメソッドがデフォルト値を返さない場合にのみsetterメソッドを呼び出すという問題は解決しません。 – nwinkler

    +0

    右。私は結論を追加します。 – helios

    関連する問題