2012-02-12 15 views
15

मैं myHash नामक पॉइंट्स के हैशसेट की एक उथली प्रतिलिपि बनाने की कोशिश कर रहा हूं। अभी तक, मेरे पास निम्न है:हैशसेट क्लोन करते समय अनचेक कास्ट चेतावनी से कैसे बचें?

HashSet<Point> myNewHash = (HashSet<Point>) myHash.clone(); 

यह कोड मुझे एक अनचेक कास्ट चेतावनी देता है। क्या ऐसा करने के लिए इससे अच्छा तरीका है?

+0

http://www.velocityreviews.com/forums/t153068-clones-generics-and-unchecked-cast-warnings: हालांकि, आप एक भी विधि है कि @SuppressWarnings("unchecked") साथ टिप्पणी की जा सकती में चेतावनी अलग कर सकते हैं .html – Borealid

उत्तर

34

आप इस कोशिश कर सकते हैं:

HashSet<Point> myNewHash = new HashSet<Point>(myHash); 
+3

+1 - यह एक बेहतर समाधान है। क्लोन() एक बुरा विचार है। – duffymo

+1

@ टेडहोप: बिल्कुल सही। धन्यवाद। – Tim

+0

अभी तक इस कोड को 'addAll (myHash) के बराबर' है, इसलिए यह संग्रह से अधिक iterates और हर तत्व, ((हाथ से कहते हैं 'जबकि क्लोन)' पैकेज-निजी पद्धति का उपयोग करके 'putMapEntries अंतर्निहित मानचित्र की एक तेजी से मनोरंजन करता है) '... * उच्छ्वास * कि वास्तव में क्यों मैं अपने खुद के HashMap/HashSet उम्र पहले लिखा था, और है कि वास्तव में क्यों इतने सारे संग्रह प्रतिस्थापन दिन के लिए मौजूद हैं ... – vaxquis

3

एक अलग जवाब new HashSet<Point>(myHash) का उपयोग कर पता चलता है। हालांकि, clone() का इरादा उसी प्रकार की एक नई वस्तु प्राप्त करना है। यदि myHashHashSet का एक उपवर्ग का एक उदाहरण है, उपवर्गीकरण से जोड़ा किसी भी अतिरिक्त व्यवहार new HashSet<Point>(myHash) का उपयोग करके नष्ट हो जाएंगे।

एक अनियंत्रित डाली चेतावनी सिर्फ एक चेतावनी है। ऐसी कई स्थितियां हैं जिनमें कास्ट सुरक्षित है, लेकिन कंपाइलर यह निर्धारित करने के लिए पर्याप्त स्मार्ट नहीं है कि यह सुरक्षित है।

@SuppressWarnings("unchecked") 
static <T implements Cloneable> clone(T o) { return (T)(o.clone()); } 
संबंधित मुद्दे

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