2016-01-13 7 views
10

मैं परिणामों की एक गुच्छा के माध्यम से लूप के लिए कई पुरानी शैली के स्थान पर जावा 8 स्ट्रीम का उपयोग कर रहा हूं और सारांश आंकड़े प्रस्तुत करता हूं।इंटस्ट्रीम वास्तव में कब बंद होता है? क्या सोनारक्यूब एस 20 9 5 इंटस्ट्रीम के लिए झूठा सकारात्मक है?

int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt(); 

नोट: उदाहरण के लिए: मैं जानता हूँ कि वहाँ गिनती कि मैं ऊपर दिखाने के ऐसा करने के लिए अन्य तरीके हैं। मैं अपने प्रश्न को स्पष्ट करने के लिए ऐसा कर रहा हूं।

मैं जावा 3.9 प्लगइन के साथ सोनारक्यूब 5.3 का उपयोग कर रहा हूं। उस कॉन्फ़िगरेशन में, कोड की उपरोक्त पंक्ति मुझे स्क्विड नियम S2095 का उल्लंघन देती है: "संसाधन बंद होना चाहिए।" नतीजा यह है कि मैं यह देखने की उम्मीद करूंगा कि एक ऑटोक्लोसेबल (उदा।, एक फ़ाइल इनपुटस्ट्रीम) खोला गया था लेकिन कभी बंद नहीं हुआ।

तो मेरा प्रश्न यहां है: क्या टर्मिनल ऑपरेशन reduce स्ट्रीम बंद करता है? इसे होना चाहिए? या यह स्क्विड नियम में एक झूठी सकारात्मक है?

+0

'' 'इंटस्ट्रीम' '' '' '' '' '' बेसस्ट्रीम'' वर्ग से प्राप्त विधि ' आप इस हैंडलर का उपयोग कर स्ट्रीम बंद होने या बंद होने पर जांच कर सकते हैं। – saka1029

+0

मॉनिटर https://jira.sonarsource.com/browse/SONARJAVA-1478 – PaoloC

उत्तर

8

यह बंद नहीं है, क्योंकि AutoCloseable इंटरफ़ेस केवल try-with-resources के अंदर काम करता है। लेकिन इस पास आपरेशन IntStream के लिए पूरी तरह से अनावश्यक रूप में यह AutoCloseable इंटरफ़ेस javadoc में कहा है:

हालांकि, जब इस तरह के सुविधा java.util.stream.Stream के रूप में उपयोग करते हुए कि समर्थन दोनों आई/ओ आधारित और गैर मैं/ओ-आधारित फॉर्म, गैर-आई/ओ-आधारित रूपों का उपयोग करते समय ब्लॉक सामान्य रूप से अनावश्यक होते हैं।

तो हाँ S2095 IntStream लिए एक मिथ्या सकारात्मक है। उम्मीद है कि SONARJAVA-1478

+0

तो स्ट्रीम के वास्तव में बंद होने पर मेरे प्रश्न अभी भी खड़े हैं। क्या आप कह रहे हैं कि यह स्क्विड नियम में झूठा सकारात्मक है? या आप कह रहे हैं कि पूरा बिंदु मूक है? –

+3

@ बॉबक्रॉस यह वास्तव में एक झूठी सकारात्मक है। 'ऑटोक्लोसेबल' इंटरफेस जावा 8 में बदल गया है और अब कुछ 'ऑटोक्लोसेबल' है जो वास्तव में बंद करने के लिए संसाधन नहीं रख सकता है। – Tunaki

+5

स्टेटिक विश्लेषण बग का पता नहीं लगाता है; यह ऐसी चीजों का पता लगाता है जो बग हो सकते हैं, और शायद देखने लायक हो सकते हैं। इस मामले में, आपने इसे देखा, और इसे एक बग नहीं बनाया, क्योंकि धारा में कोई संसाधन नहीं है जिसे रिलीज़ की आवश्यकता है। –

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