2014-12-03 27 views
13

Arrays.asList(E[] e)List के रूप में सरणी का दृश्य देता है, लेकिन जब सरणी शून्य होती है तो यह NullPointerException फेंकता है।खाली सूची में शून्य सरणी

Arrays.asList(null); //NullPointerException. 

असल में मैं

List list = possibleNullArray != null ? Arrays.asList(possibleNullArray) : Collections.EMPTY_LIST; 

कर रहा हूँ हालांकि, केवल इस उद्देश्य के लिए अपने प्रोजेक्ट में एक उपयोगिता वर्ग बनाने एक बात यह है कि मुझे क्या करना नहीं पसंद करते हैं है। क्या 0 यूखाली करने के लिए शून्य क्रियाओं को बदलने के लिए अपाचे कॉमन्स या अमरूद जैसी कुछ उपयोगिता कक्षा या लाइब्रेरी है? (यानी सरणी और संग्रह के बीच एक शून्य-सुरक्षित कनवर्टर)।

आप इस समस्या को कैसे हल करेंगे?

+0

बिल्कुल एनपीई आप (एक अशक्त, Arrays.asList के रूप में सेट आप मिल जाएगा); अगर मैं गलत नहीं हूं तो सरणी/सरणीसूची/सरणी की सूची के रूप में आपकी ऑब्जेक्ट को परिवर्तित करता है। – Secondo

+0

खाली संग्रहों का उपयोग करने के लिए एक अच्छा प्रैटिस है, शून्य की लंबाई सरणी, जब आप दिमाग में पठनीयता रखते हैं। मैं डिस्क नहीं कर रहा क्यों Array.asList (शून्य) एक NullPointerException फेंकता है। यह अपने निर्माता द्वारा एक desing निर्णय था। मैं रिक्त सरणी या संग्रह में शून्य arras o संग्रह को बदलने के लिए एक उपयोगिता वर्ग या पुस्तकालय के बारे में पूछ रहा हूँ। – Ezequiel

+0

मेरे उत्तर – Secondo

उत्तर

8

मैं अपाचे कॉमन्स में किसी भी util विधि/अमरूद कि अशक्त से बाहर एक खाली List उदाहरण बन जाएगा के बारे में पता नहीं कर रहा हूँ।

सबसे अच्छी बात यह है कि आप शायद संभवतः संभवतः शून्य सरणी को प्रारंभ करना चाहते हैं, उदा। ArrayUtils.nullToEmpty() के साथ। जितनी जल्दी हो सके नल से छुटकारा पाएं।

SomeObject[] array = ArrayUtils.nullToEmpty(possiblyNullArray); 
+1

इसके अलावा, आपके पास कच्ची 'सूची' है। मुझे उम्मीद है कि आपका कोड वास्तव में जेनरेट किया गया है। नए कोड में कच्चे संग्रह के लिए कोई जगह नहीं है। –

+1

मैं आपका उत्तर स्वीकार करता हूं क्योंकि मुझे लगता है कि कोड के अन्य टुकड़ों से प्राप्त पैरामीटर को सामान्य करने के लिए यह एक अच्छा तरीका है जिसे आप नियंत्रित नहीं करते हैं। – Ezequiel

+0

यह उत्तर उन कारणों के लिए आदर्श नहीं है जिनसे @Slanec ने बताया। –

29

आप जावा 8 Optional उपयोग कर सकते हैं:

String[] arr = null; 
List<String> list = Arrays.asList(Optional.ofNullable(arr).orElse(new String[0])); 
+0

यह। जावा 7 पर, गुवा के 'वैकल्पिक' के साथ भी करना संभव है। या एक अलग अवधारणा के साथ एक ही अवधारणा - अमरूद के 'ऑब्जेक्ट्स। फर्स्टनॉन नल() ' –

+0

उत्तर के लिए धन्यवाद, मैंने आपको उकसाया, लेकिन एक विचार स्लेनेक उत्तर मेरी समस्या के लिए बेहतर फिट बैठता है। – Ezequiel

7

आप उपयोग कर सकते हैं जावा 8 Optional और Stream

Optional.ofNullable(possibleNullArray) 
     .map(Arrays::stream) 
     .orElseGet(Stream::empty) 
     .collect(Collectors.toList()) 
संबंधित मुद्दे