2011-09-27 27 views
8

私はFindBugsを使用してプロジェクトのコードレビューをしようとしています。FindBugs RV_ABSOLUTE_VALUE_OF_RANDOM_INT警告

我々はユニークなIDを生成する方法(ランダム)を有する:

public static String generateUUID(int base){ 

    return String.valueOf(getCurrentTimeInNanos((long)base)) + 

        String.valueOf(Math.abs(random.nextInt())); 
} 

およびFindBugsのは、RV_ABSOLUTE_VALUE_OF_RANDOM_INT警告(RV:符号付き32ビットのランダムな整数の絶対値を計算する不正の試み)を示し、iは、問題を推測しますString.valueOf(Math.abs(random.nextInt())にあります。

あなたはこれがなぜ、どのように修正するのか説明がありますか?

ありがとうございました。

答えて

18

Math.abs can actually return negative results for integer inputsので、多分それは次のとおりです。-MIN_VALUEは表現できないので、それだけ、しかし、MIN_VALUEのためにこれを行い

assertTrue(Math.abs(Integer.MIN_VALUE) < 0); 

。オーバーフローの問題の種類。それを修正する方法については

  • 独自のUUIDをすることはありません。 java.util.UUIDを使用してください。 1

-

  • はMath.abs

  • 使用にRandom.nextInt(Integer.MAX_VALUEの)0からMAX_VALUEに番号を取得するを呼び出す前にlongに乱数をキャスト