2012-12-05 24 views
9

जावा के साथ, क्या एक कस्टम क्लास बनाने का कोई तरीका है जिसमें [] एक्सेसर को सरणी की तरह इस्तेमाल किया जा सकता है?क्या एक कस्टम क्लास बनाने का कोई तरीका है जो [] में जावा में इस्तेमाल किया जा सकता है, एक सरणी के समान?

सामान्य सरणी

int[] foo = int[5]; 
foo[4] = 5; 
print(foo[4]); 
//Output: "5" 

कस्टम वर्ग

class Bar { 
    //Custom class that uses index as a ref 
} 

Bar foo = new Bar(5); 
foo.set(4, 5); 
print(foo[4]); 
//Output: "5" 
+5

मेरी इच्छा है ... यदि '[]' को ओवरराइड करना संभव था, तो हम बदसूरत 'list.get (5) 'और' str.charAt (6) '? – dasblinkenlight

+0

नहीं से फंस जाएंगे , मैं अफवाहें सुनता रहता हूं कि ऑपरेटर अधिभार जावा की बाद में रिलीज में होगा, हालांकि मैं ईमानदारी से ऐसा नहीं सोचता कि यह होगा। –

+0

एक साइड नोट के रूप में, groovy में देखें :) –

उत्तर

15

नहीं, आप Java में अपनी कक्षाओं के लिए [] ऑपरेटर को ओवरलोड नहीं कर सकते। लेकिन आप अपनी सरणी के लिए गेटटर बना सकते हैं।

6

नहीं, जावा में कोई ऑपरेटर ओवरलोडिंग नहीं है।

4

नहीं, आपको विधि को लागू करना होगा, उदाहरण के लिए ArrayList उदाहरण के लिए करता है।

-4

ज़रूर,

कोशिश

Bar[] foo = new Bar[4]; 
foo[2] = new Bar(); 
System.out.print(foo[2]); 

सादर

+4

बहुत मजेदार ... (नहीं, मैं डाउनवॉटर नहीं हूं)। – dasblinkenlight

+0

आपने लोगों को क्यों -? –

+2

आप बहुत गलत हैं। – Lucas

1

नहीं, यह जावा करने के लिए [ और ] के ऑपरेटर ओवरलोडिंग जोड़ना होगा - आप बराबर प्राप्त/सेट तरीकों का उपयोग करने की आवश्यकता है बजाय।

जावा की किसी भी भविष्य के संस्करण के लिए ऑपरेटर ओवरलोडिंग को लागू करने की कोई मौजूदा योजना नहीं है - यह निश्चित रूप से जावा 8 की योजना में नहीं है, और वार्ता ओरेकल ने जावा 9 और उससे आगे के वार्ता के लिए योजनाओं को शामिल नहीं किया है यह या तो। व्यक्तिगत रूप से मैं इसके प्रशंसक नहीं हूं - इसमें कई जटिलताओं जैसे कि प्राथमिकता और आदेश शामिल हैं जो सूक्ष्म, कष्टप्रद बग का कारण बन सकते हैं जब तक कि उपयोगकर्ता अविश्वसनीय रूप से सावधान न हों, और (चाहे आप इस रुख से सहमत हों या नहीं) मुझे विश्वास है कि यह था कारण यह पहली जगह भाषा से बाहर करने के लिए निर्णय लिया गया था।

+0

सामान्य ऑपरेटर ओवरलोडिंग में कुछ समस्याएं होती हैं, लेकिन उनमें से अधिकतर इस तथ्य से निकलती हैं कि यह मूल रूप से स्पष्ट नहीं है कि 'thing1 + thing2' को चीज़ 1 या चीज़ 2 में परिभाषित किया जाना चाहिए या नहीं। इसके विपरीत, यह और अधिक स्पष्ट है कि 'thing1 [thing2]' को 'thing1' में परिभाषित किया जाना चाहिए। – supercat