2011-09-27 10 views
8

मैं FindBugs का उपयोग करके हमारी परियोजना के लिए कोड समीक्षा करने का प्रयास कर रहा हूं।FindBugs RV_ABSOLUTE_VALUE_OF_RANDOM_INT चेतावनी

हम (अनियमित) विशिष्ट आईडी उत्पन्न करने के लिए एक विधि है:

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 इंगित करता है चेतावनी (आर वी: पर हस्ताक्षर किए 32-बिट यादृच्छिक पूर्णांक का निरपेक्ष मान की गणना करने के बुरा प्रयास), मैं समस्या लगता है String.valueOf(Math.abs(random.nextInt()) में है।

इसलिए यदि आपके पास कोई स्पष्टीकरण है कि यह क्यों है और इसे कैसे ठीक किया जाए?

धन्यवाद।

उत्तर

18

शायद यह है क्योंकि Math.abs can actually return negative results for integer inputs:

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

यह केवल MIN_VALUE के लिए ऐसा करता है, हालांकि, क्योंकि -MIN_VALUE नहीं दर्शाया जा सकता। एक अतिप्रवाह समस्या की तरह।

इसे ठीक करने के लिए के रूप में:

  • अपनी खुद की UUID नहीं बनाते हैं। java.util.UUID का प्रयोग करें।

  • Math.abs

    कॉल करने से पहले लंबे समय के लिए यादृच्छिक संख्या डाली
  • उपयोग random.nextInt (Integer.MAX_VALUE) 0 से MAX_VALUE के लिए एक नंबर पाने के लिए - 1

संबंधित मुद्दे