2011-09-05 14 views
5

यदि यह एक नियमित सरणी थी, तो मैं केवल एक नई सरणी बना सकता था और फिर सरणी का उपयोग कर सकता था, लेकिन जेनेरिक मुझे ऐसा करने नहीं देगा। सबसे अच्छी बात मैं अब तक के साथ आ गया है:एक ऐरे का आकार बदलना

public void resize() { 
    T[] tempArray = Arrays.copyOf(myArray,myArray.length*3); 
} 

यह कम्पाइल, लेकिन रन टाइम पर, मैं एक नल पॉइंटर एक्सेप्शन मिलता है। क्या कोई समझा सकता है कि मैं क्या गलत कर रहा हूं?

+2

किसी भी कारण 'java.util.ArrayList' आपके लिए काम नहीं करता है? यह सब कुछ और अधिक संभालता है, पहिया को फिर से शुरू करने की कोई ज़रूरत नहीं है। – corsiKa

+0

यदि आप सरणी का आकार बदल रहे हैं, तो आप शायद एक सामान्य ऐरेलिस्ट चाहते हैं। – Cheeso

+0

मैं Arrays और ArrayLists से परिचित हूं, लेकिन मैं सिर्फ जेनेरिक के बारे में जानने की कोशिश कर रहा हूं। सुझाव के लिए धन्यवाद (अभ्यास में, ऐरेलिस्ट जो मैं शायद उपयोग करूंगा)। – MatthewK

उत्तर

6

आप प्रतिलिपि बनाने के लिए उपयोग कर सकते हैं Arrays.copyOf(myArray,myArray.length*3)

मेरा अनुमान है कि myArray[0] रिक्त है तो myArray[0].getClass() nullpointer

अगर आप घटकों के क्रम प्रकार की जरूरत है आप उपयोग कर सकते फेंकता myArray.getClass().getComponentType()

0

दो चीजें:

  1. यदि आपको शून्य पॉइंट मिल रहा है resize() की पहली पंक्ति पर आर शायद यह है क्योंकि आपके पास myArray[0] में कोई मूल्य नहीं है। यदि यह शून्य है, तो आपका getClass() बम होगा।

  2. आप myArray = tempArray असाइन नहीं कर रहे हैं, तो आप शायद जल्द ही ArrayIndexOutOfBounds में भाग लेंगे।

+0

यही था, मैंने सरणी में कुछ सामान मैन्युअल रूप से जोड़ने की कोशिश की और इसे ठीक किया, इसलिए समस्या कहीं और है। और # 2 पर अच्छा पकड़, खेद है कि मैं इसे प्रश्न में पेस्ट करना भूल गया। – MatthewK

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