2017-03-21 6 views
6

ग्रहण नियॉन में, अगर मैं इस जावा कोड लिखने: इस तरह केएक्लिप्स स्ट्रीम के लिए रिसाव चेतावनी क्यों नहीं दिखाता है?

public class MyStream<T> implements Stream<T> { 
    // implementation 
} 

रूप

Stream<Object> stream = Stream.builder().build(); 

मुझे कोई रिसाव चेतावनी मिलता है, लेकिन अगर मैं Stream लागू है, और मैं इसी तरह के कोड लिखने

Stream<Object> stream = new MyStream<>(); 

मुझे Resource leak: 'stream' is never closed चेतावनी मिलती है। यह केवल ग्रहण में होता है, जबकि javac के साथ संकलन किसी भी चेतावनी जारी नहीं करता है।

नोट मैं स्ट्रीम को बंद करने के तरीके के बारे में कोई जवाब नहीं ढूंढ रहा हूं, लेकिन एक उत्तर के लिए जो एक ही इंटरफेस के लिए इस अलग व्यवहार के कारण बताता है।

उत्तर

3

पहले मामले में आप संसाधन का उदाहरण नहीं बना रहे हैं। दूसरे मामले में, आप हैं।

eclipse documentation states the following:

स्वामित्व/जिम्मेदारी
ऊपर निदान मूल रूप से लगता है कि एक विधि है कि एक संसाधन प्रकार का एक उदाहरण बनाता भी इस संसाधन बंद करने के लिए जिम्मेदार है। [...]
- यदि कोई विधि किसी नई अभिव्यक्ति के बजाय विधि कॉल के माध्यम से संसाधन प्राप्त करती है, तो यह जिम्मेदार हो सकती है या नहीं भी हो सकती है; किसी भी समस्या केवल संभावित संसाधन रिसाव के रूप में चिह्नित की गई है।

4

ग्रहण में उन प्रकार के श्वेतसूची हैं जिन्हें क्लीनअप की आवश्यकता नहीं है, क्योंकि वे वास्तव में सिस्टम संसाधनों का संदर्भ नहीं देते हैं। कोर जावा प्रकार यहां सूचीबद्ध हैं, लेकिन आपके कस्टम प्रकार नहीं हैं। अधिक जानकारी के लिए the help देखें।

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