4

Java でデータ型 BigDecimal の NULL を検証しようとしています。値が 0 であることを検証できますが、NULL の場合はNULL Point Exceptionが発生します。このデータ型の検証を例外で処理する必要がありますか、それとも検証のためにデータに対して実行できる計算がありますか。以下は、私がこれまでに行ったことの例です。

 if(crime.getCrimeLatLocation() != null  & crime.getCrimeLongLocation() != null || crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0 & crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0){

     logger.info('Valid Data');
    }
4

4 に答える 4

1

比較の前に null 値をチェックする必要があります。この機能を比較に使用できます。

/** This method compares 2 BigDecimal objects for equality. It takes care of null object and that was the necessity of having it.
 * To use this function most efficiently pass the possibly null object before the not null object.
 * @param pNumber1
 * @param pNumber2
 * @return boolean
 */
public static boolean isEqual(BigDecimal pNumber1, BigDecimal pNumber2)
{
    if ( pNumber1 == null )
    {
        if ( pNumber2 == null)
            return true;
        return false;
    }
    if ( pNumber2 == null)
        return false;
    return pNumber1.compareTo(pNumber2)==0;
}       
于 2015-08-21T13:58:13.587 に答える
1

ここであなたのテスト

if(crime.getCrimeLatLocation() != null  & crime.getCrimeLongLocation() != null 
|| crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0 & crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0)

ブール演算子ではなく二項演算子を使用します。これを次のように変更します

if((crime.getCrimeLatLocation() != null  && crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0) 
|| (crime.getCrimeLongLocation() != null && crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0))

これは、crimeLatLocationis not nulland not zero またはcrimeLongLocationis not nulland not のいずれかを示しますzero

を使用する&と、式の両側が評価されます。使用する&&と、式の最初の部分が の場合、テストが短絡されfalseます。

于 2013-04-10T21:06:53.783 に答える