2012-05-11 10 views
6

मैं जावा में नया हूं और विभिन्न संग्रहों को सीखने की कोशिश कर रहा हूं जो प्रोग्रामर उपयोग कर सकते हैं। मैंने ग्रहण में एक स्क्रैपबुक में "java.util" आयात किया और निम्न कोड का निरीक्षण किया।"प्रकार ArrayList सामान्य नहीं है" मतलब क्या है?

ArrayList<String> list = new ArrayList<String>(); 
list.add("test1"); 
list.add("test2"); 

मुझे यह आउटपुट प्राप्त होता है।

The type ArrayList is not generic; it cannot be parameterized with arguments <String> 
Syntax error, parameterized types are only available if source level is 5.0 
The type ArrayList is not generic; it cannot be parameterized with arguments <String> 
Syntax error, parameterized types are only available if source level is 5.0 

इस त्रुटि का क्या अर्थ है? मैंने एक सामान्य सरणी सूची नहीं बनाई; मैंने तारों की सरणी सूची बनाई है। इसके अलावा, "स्रोत स्तर" क्या है?

+3

आप जावा संस्करण कम से कम 5. – kosa

उत्तर

10

ग्रहण में अपने जावा संस्करण 1.4 के लिए सेट है ओवरराइड करता है, जावा में जेनरिक केवल जावा में 5.

शुरू किए गए थे

अपने जेडीके को ग्रहण में 1.5 या उससे ऊपर में बदलें जो इस समस्या को हल करेगा।

आप आप इसे जावा 1.5 जा रहा है या इसके बाद के संस्करण फिर जांच संकलक अनुपालन 5 और ऊपर के लिए सेट है देखते हैं, तो यहाँ से Project - > Java Build Path - > Libraries

अपने JDK देख सकते हैं।

आप देख सकते हैं कि Project - > Java Compiler

संपादित करें:

नई JDK को जोड़ने के लिए

ग्रहण का अधिकार परियोजना पर क्लिक करें -> पथ जावा बिल्ड -> पुस्तकालय -> पुस्तकालय जोड़ें -> JRE सिस्टम लाइब्रेरी -> स्थापित लाइब्रेरीज़ -> जोड़ें -> मानक वीएम -> अपना इंस्टॉलेशन स्थान प्रदान करें और ठीक दबाएं

इंस की सूची में नोट करें लम्बे जेआरई, सुनिश्चित करें कि आप अपने जावा 7 की जांच करें।

+0

धन्यवाद! मैंने ओरेकल से जेडीके 7 डाउनलोड और स्थापित किया है। मैं सोच रहा हूं कि ग्रहण को उस जेडीके का उपयोग करने के लिए कैसे कहना है। –

+0

मेरा जवाब संपादित – mprabhat

+0

धन्यवाद! जैसा कि आपने ऊपर दिए गए संपादन में नोट किया है और उसके बाद प्रोजेक्ट -> गुण -> जावा कंपाइलर 6.0 में काम किया है, में एक नया जेआरई सिस्टम लाइब्रेरी जोड़ना। –

4

क्या मेरे मन में आता है:

  • जांच अगर JDK जेनरिक के साथ पूरी तरह से शिकायत है
  • चेक (ताकि आपके JSE में ArrayList वर्ग वास्तव में एक सामान्य वर्ग है) अगर आप की जरूरत नहीं है एक और ArrayList जो गुंजाइश पूर्वता है और मानक पुस्तकालय परिभाषा
+0

मैं निर्माण पथ से org.osgi.foundation-1.2.0.jar दूर करने के लिए समस्या को ठीक करने के लिए किया था की है। विचार के लिए धन्यवाद। –

1

हां समस्या 1.5 और उससे ऊपर के लिए दूर हो जाती है। ऐसा लगता है कि सवाल पूरी तरह से संबोधित नहीं किया गया है, हालांकि, अगर कोई इस प्रश्न पर आता है तो मैं अपना 2 सेंट जोड़ रहा हूं। यह मुख्य रूप से प्रश्न के इस हिस्से के बारे में है:

मैंने एक सामान्य सरणी सूची नहीं बनाई है; मैंने तारों की सरणी सूची बनाई है।

त्रुटि संदेश का उल्लेख किया:

> प्रकार ArrayList सामान्य नहीं है; यह पैरामिट्रीकृत तर्क के साथ नहीं किया जा सकता < स्ट्रिंग >

> सिंटैक्स त्रुटि, पैरामिट्रीकृत प्रकार ही उपलब्ध हैं, तो स्रोत स्तर 5,0

यह वास्तव में क्या मतलब है, है जावा 1.5 के बाद से हम प्रकार का उपयोग कर सकते है पैरामीटर भी (जहां एक मान मानकों का उपयोग करने के लिए इस्तेमाल किया गया था)। जेडीके 1.5 जेनेरिक प्रस्तुत करता है, जो हमें प्रकारों (या पैरामीटर प्रकार) पर सार तत्वों की अनुमति देता है।

कक्षा डिजाइनर जेनेरिक परिभाषा में प्रकारों के बारे में हो सकते हैं। ArrayList कार्यान्वयन के रूप में नीचे होगा:

public class ArrayList<E> implements List<E> .... { 
    // Constructor 
    public ArrayList() {...} 

    // Public methods 
    public boolean add(E e) {...} 
    public void add(int index, E element) {...} 
    public boolean addAll(int index, Collection<? extends E> c) {...} 
    public abstract E get(int index) {...} 
    public E remove(int index) {...} 
    ... 
} 

कहाँ किसी भी प्रकार स्ट्रिंग या पूर्णांक आदि इसलिए नाम सामान्य ArrayList की तरह हो सकता है।

उपयोगकर्ताओं वस्तु इन्स्टेन्शियशन या विधि मंगलाचरण जो नीचे की तरह इस उदाहरण में किया गया था के दौरान प्रकार में विशिष्ट हो सकता है:

ArrayList<String> list = new ArrayList<String>(); 

(कौन सा उपरोक्त मामले में भ्रम की स्थिति थी, अगर मैं गलत नहीं हूँ: -))) जेनरिक के उपयोग (यदि आवश्यक की

उदाहरण:

// Declaring a DAO layer 
public interface IMasterAbstractDao<E, I> { 
    public E findById(I id) {...} 
    public void delete(E e) {...} 
    public List<E> findByCriteria(Criterion criterion) {...} 
} 

कहाँ इकाई टी है हाँ वापस आ गया। इसका उपयोग सामान्य मॉडल बनाने में परिभाषित सभी मॉडल beans के लिए किया जा सकता है।

उम्मीद है कि इससे मदद मिलती है।

Reference: Java Programming Tutorial - Generics

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