2012-06-17 20 views
9

मैं विभिन्न वर्ग उदाहरणों की एक सरणीसूची बनाने की कोशिश कर रहा हूं। कक्षा प्रकार को परिभाषित किए बिना मैं एक सूची कैसे बना सकता हूं? (<Employee>)विभिन्न ऑब्जेक्ट्स की उदाहरण सूची बनाना

List<Employee> employees = new ArrayList<Employee>(); 
employees.add(new Employee()); 
Employee employee = employees.get(0); 

उत्तर

13

आप List<Object> list = new ArrayList<Object>() की तरह वस्तु की एक सूची बना सकते हैं। सभी वर्गों के कार्यान्वयन फैली रूप में अस्पष्ट या java.lang.Object वर्ग से स्पष्ट, इस सूची में किसी भी वस्तु धारण कर सकते हैं Employee के उदाहरण, Integer, सहित, String आदि

जब आप इस सूची से कोई तत्व को पुनः प्राप्त करने के लिए, आप एक Object और कोई पुन: प्राप्त करने की जाएगी

List<Object> list = new ArrayList<Object>(); 
list.add("String"); 
list.add(Integer.valueOf(1)); 
list.add(new Employee()); 

Object retrievedObject = list.get(2); 
Employee employee = (Employee)list.get(2); // explicit cast 
+0

सूची उदाहरण = नया ऐरेलिस्ट <>(); example.get (0) .myFunction(); और सूची उदाहरण = नया ArrayList (); example.get (0) .myFunction(); मैंने इन कोडों का उपयोग किया लेकिन त्रुटि: प्रतीक नहीं मिला प्रतीक: विधि myFunction(); – mypolat

+0

यह 'सूची <ऑब्जेक्ट उदाहरण = नया ArrayList () होना चाहिए;' जब आपको 'example.get (0)' जैसी वस्तु मिलती है, तो आपको एक स्पष्ट कलाकार बनाना होगा। कौन सा वर्ग विधि MyFunction() लागू करता है? यदि 'कर्मचारी 'लागू करता है' मेरा फ़ंक्शन() 'आपको कुछ (' कर्मचारी) (example.get (0)) जैसे कुछ करना चाहिए)। MyFunction(); ', इसके साथ आप यह इंगित कर रहे हैं कि स्थिति 0 से पुनर्प्राप्त ऑब्जेक्ट हो सकता है एक कर्मचारी के रूप में संभाला। बेशक अगर यह अपवाद नहीं है तो फेंक दिया जाएगा। –

+0

कक्षा सेब { int मूल्य; सार्वजनिक शून्य myFunction (int iPrice) { मूल्य = iPrice; } } कक्षा नारंगी { int मूल्य; सार्वजनिक शून्य myFunction (int iPrice) { मूल्य = iPrice; } } सार्वजनिक वर्ग मुख्य { public static void (String [] args) { सूची सूची = नए ArrayList <>(); // list.add (नया सेब()) सूची में 3 सेब ऑब्जेक्ट बनाएं; list.add (नया सेब()); list.add (नया नारंगी()); list.get (0)।/* "प्राप्त करें (0)।" यह ऐप्पल ऑब्जेक्ट और मेरे फ़ंक्शन का उपयोग नहीं कर रहा है */ } } – mypolat

8
List<Object> objects = new ArrayList<Object>(); 

objects सूची Object

012 में से किसी को स्वीकार करेंगे: अब एक Employee, आप अर्थ इस मामले में एक स्पष्ट डाली प्रदर्शन करने के लिए इस प्रकार की जरूरत है

आप के रूप

public class BaseEmployee{/* stuffs */} 

public class RegularEmployee extends BaseEmployee{/* stuffs */} 

public class Contractors extends BaseEmployee{/* stuffs */} 

इस प्रकार की तरह और सूची

List<? extends BaseEmployee> employeeList = new ArrayList<? extends BaseEmployee>(); 
+0

कच्चे प्रकार का उपयोग निराश है । जावा भाषा विशिष्टता यह भी कहती है कि यह संभव है कि जावा प्रोग्रामिंग भाषा के भविष्य के संस्करण कच्चे प्रकार के उपयोग को अस्वीकार कर देंगे। इसके अलावा, विस्तार का उपयोग तत्वों को सूची में जोड़ने से रोक देगा, क्योंकि सवाल का सुझाव है। –

+0

क्या कच्चा प्रकार? –

+0

'सूची' और' ऐरेलिस्ट '[कच्चे प्रकार] हैं (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.8), है ना? जेएलएस सेक्शन 4.8 कहता है: "कच्चे प्रकार के उपयोग को विरासत कोड की संगतता के लिए रियायत के रूप में ही अनुमति दी जाती है। जावा प्रोग्रामिंग भाषा में जेनेरिक के परिचय के बाद लिखे गए कोड में कच्चे प्रकार का उपयोग दृढ़ता से ** निराश ** है। यह संभव है कि जावा प्रोग्रामिंग भाषा के __that भविष्य के संस्करण कच्चे प्रकार के उपयोग को अस्वीकार कर देंगे " –

0

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

List<Object> employees = new ArrayList<Object>(); 

अन्यथा आप जितना विशिष्ट हो सके:

List<? extends SpecificType> employees = new ArrayList<? extends SpecificType>(); 
+0

समय पर वापस जा रहे हैं, हुह! –

1

List anyObject = new ArrayList();

or

List<Object> anyObject = new ArrayList<Object>();

अब anyObjectobjects of any type पकड़ कर सकते हैं।

उदाहरणwhat kind of object it is जानने के लिए उपयोग करें।

0

मेरा मानना ​​है कि अपने सबसे अच्छे शॉट वस्तुओं की एक सूची के रूप में सूची घोषित करने के लिए है:

List<Object> anything = new ArrayList<Object>(); 

तो फिर तुम रख सकते हैं जो कुछ भी आप यह चाहते हैं, जैसे:

anything.add(new Employee(..)) 

जाहिर है, आप करेंगे उचित कास्टिंग के बिना सूची में से कुछ भी पढ़ने में सक्षम नहीं:

Employee mike = (Employee) anything.get(0); 

मैं उपयोग को हतोत्साहित करता हूं जैसे कच्चे प्रकार के:

List anything = new ArrayList() 

के बाद से जेनरिक का पूरा उद्देश्य ठीक है उन्हें से बचने के लिए, भविष्य जावा नहीं रह गया है कच्चे प्रकार suport सकता है में, कच्चे प्रकार माना जाता है विरासत और एक बार आप एक कच्चे प्रकार आप कर रहे हैं का उपयोग करें किसी दिए गए संदर्भ में जेनिक्स का उपयोग करने की अनुमति नहीं है।Combining Raw Types and Generic Methods

0

How can I create a list without defining a class type? (<Employee>)

अगर मैं सही ढंग से इस पढ़ रहा हूँ, तुम बस प्रकार, सही निर्दिष्ट करने के लिए होने से बचने के लिए चाहते हैं: उदाहरण के लिए, एक एक यह एक और सवाल देखो ले?

जावा 7 में, आप

List<Employee> list = new ArrayList<>(); 

लेकिन अन्य विकल्पों पर विचार-विमर्श किया जा रहा है किसी भी बस प्रकार सुरक्षा बलिदान करने के लिए जा रहे हैं कर सकते हैं।

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