दिलचस्प पोस्ट
jquery के साथ iframe स्रोत बदल रहा है शीर्ष एक्शनबार पर एंड्रॉइड नेविगेशन ड्रॉवर XPath में (पाठ (), 'कुछ स्ट्रिंग') एक से अधिक पाठ उप-नोड के साथ नोड के साथ उपयोग किए जाने पर काम नहीं करता है दस्तावेज के शीर्ष के विपरीत जेएस लोड करने के लाभ .each () के पूरा होने के बाद एक jQuery फ़ंक्शन को शामिल करना पहला शब्द चयनकर्ता ग्रिडलेआउट के अंदर तत्व के एक्स और वाई सूचकांक कैसे प्राप्त करें? मैं अपने कस्टम ऑब्जेक्ट्स पार्सलेट योग्य कैसे बना सकता हूं? कोर डेटा में सभी प्रविष्टियों को हटाएं / रीसेट करें? ActionBar देखने के लिए कैसे? पोस्ट करने के लिए Stackoverflow को चित्र कैसे अपलोड करें? .NET में KeyDown और KeyPress के बीच अंतर क्या है? जब सी + + मैक्रोज़ फायदेमंद होते हैं? जावा कॉल स्टैक की अधिकतम गहराई क्या है? हाल ही में शुरू किए गए कार्यक्रम को फिर से चलाने के लिए क्या ईक्लेप्से में कोई शॉर्टकट है?

जावा में ऑपरेटर ओवरलोडिंग

क्या आप मुझे बता सकते हैं कि जावा में ऑपरेटरों को ओवरलोड करना संभव है? अगर जावा में कहीं भी इसका उपयोग किया जाता है तो क्या आप कृपया इसके बारे में मुझे बता सकते हैं

वेब के समाधान से एकत्रित समाधान "जावा में ऑपरेटर ओवरलोडिंग"

नहीं, जावा उपयोगकर्ता-निर्धारित ऑपरेटर ओवरलोडिंग का समर्थन नहीं करता। जावा का एकमात्र पहलू जो "कस्टम" ऑपरेटर ओवरलोडिंग के करीब आता है + स्ट्रिंग्स के लिए हैंडलिंग है, जो स्ट्रिंगबिल्ल्डर / स्ट्रिंगबफ़र का उपयोग करके स्थिरांक या निष्पादन-समय सम्मिलन के संकलन-समय संयोजन में परिणाम देता है। आप अपने खुद के ऑपरेटरों को परिभाषित नहीं कर सकते जो कि उसी तरह कार्य करते हैं हालांकि

जावा-जैसी (और जेवीएम-आधारित) भाषा के लिए जो ऑपरेटर ओवरलोडिंग का समर्थन करता है , आप ग्रूवी को देख सकते हैं वैकल्पिक रूप से, आप जावा कंपाइलर प्लगइन समाधान के साथ भाग्य पा सकते हैं ।

ऑपरेटर ओवरलोडिंग जावा स्ट्रिंग प्रकार के संयोजन के लिए उपयोग किया जाता है:

 String concat = "one" + "two"; 

हालांकि, आप अपने ऑपरेटर ओवरलोड को परिभाषित नहीं कर सकते

सभी लोगों के अलावा इंगित करते हुए कि + स्ट्रिंग्स के लिए अतिभारित है - यह भी फ्लोटिंग प्वाइंट और पूर्णांक दोनों कार्यों के लिए अतिभारित है, जैसे कि * और /

[संपादित करें] फ्लोटिंग प्वाइंट के लिए % ओवरलोड भी है, जो सी या सी ++ पृष्ठभूमि वाले लोगों के लिए आश्चर्यचकित हो सकता है

जावा ऑपरेटर ओवरलोडिंग की अनुमति नहीं देता प्राथमिकता यह है कि कार्रवाई करने के लिए आपके क्लास पर कोई विधि परिभाषित करें: a.add(b) a + b बजाय आप अन्य बीट्स का सार देख सकते हैं जो जावा को सी से बाहर भाषाओं की तरह छोड़ दिया गया है: सुविधाओं को सी और सी ++ से हटा दिया गया है

आप यह स्वयं नहीं कर सकते क्योंकि जावा ऑपरेटर ओवरलोडिंग की अनुमति नहीं देता है।

एक अपवाद के साथ, हालांकि स्ट्रिंग ऑब्जेक्ट के लिए + और + = ओवरलोड हैं

कोई भी जावा ऑपरेटर ओवरलोडिंग का प्रयास कर सकता है इसकी अपनी सीमाएं हैं, लेकिन अगर आप वास्तव में ऑपरेटर ओवरलोडिंग का उपयोग करना चाहते हैं तो यह कोशिश करने के लायक है।

बस अपने जावा कोड के साथ Xtend का उपयोग करें यह ऑपरेटर ओवरलोडिंग का समर्थन करता है:

  package com.example; @SuppressWarnings("all") public class Test { protected int wrapped; public Test(final int value) { this.wrapped = value; } public int operator_plus(final Test e2) { return (this.wrapped + e2.wrapped); } } package com.example class Test2 { new() { val t1 = new Test(3) val t2 = new Test(5) val t3 = t1 + t2 } } 

आधिकारिक वेबसाइट पर, प्रत्येक ऑपरेटर के लिए लागू करने के तरीकों की एक सूची है!

जैसा कि बहुत से अन्य लोगों ने उत्तर दिया है: जावा प्रयोक्ता परिभाषित ऑपरेटर ओवरलोडिंग का समर्थन नहीं करता।

शायद यह ऑफ-विषय है, लेकिन मैं कुछ उत्तरों में कुछ चीजों पर टिप्पणी करना चाहता हूं।

पठनीयता के बारे में
की तुलना करें:

  1. c = a + b
  2. c = a.add (बी)

दुबारा देखो!
कौन सा एक और पठनीय है?

एक प्रोग्रामिंग भाषा जो उपयोगकर्ता-निर्धारित प्रकार के निर्माण की अनुमति देती है, उन्हें उसी प्रकार से कार्य करना चाहिए जैसे कि अंतर्निहित प्रकार (या आदिम प्रकार)।

तो जावा जेनेरिक प्रोग्रामिंग के एक मूल सिद्धांत को तोड़ता है:
हमें उपयोगकर्ता-निर्धारित प्रकार के ऑब्जेक्ट के साथ अंतर्निहित प्रकार के ऑब्जेक्ट्स का आदान-प्रदान करने में सक्षम होना चाहिए।
(आप सोच सकते हैं: "क्या उन्होंने 'अंतर्निर्मित वस्तुओं' कहा था?" हां, यहां देखें ।)

स्ट्रिंग समापन के बारे में:

गणितज्ञ सेट पर कम्यूटेटिक संचालन के लिए symnol + का उपयोग करते हैं।
इसलिए हम यह सुनिश्चित कर सकते हैं कि a + b = b + a
अक्षर संयोजन (अधिकांश प्रोग्रामिंग भाषाओं में) इस सामान्य गणितीय संकेतन का सम्मान नहीं करता है।

 a := "hello"; b := "world"; c := (a + b = b + a); 

या जावा में:

 String a = "hello"; String b = "world"; boolean c = (a + b).equals(b + a); 

अतिरिक्त:
नोटिस कैसे जावा समानता और पहचान में भ्रमित हैं। == (समानता) प्रतीक का अर्थ है:
ए। आदिम प्रकारों के लिए समानता
ख। उपयोगकर्ता-परिभाषित प्रकारों की पहचान-जांच, इसलिए, हमें समानता के लिए फ़ंक्शन बराबर () का उपयोग करने के लिए मजबूर किया जाता है
लेकिन … ऑपरेटर ओवरलोडिंग के साथ यह क्या करना है?
यदि भाषा ऑपरेटर को ओवरलोड करने की अनुमति देता है तो समानता ऑपरेटर को उचित अर्थ दे सकता है।

या, आप जावा ग्रूवी को बना सकते हैं और ये कार्य प्राप्त करने के लिए इन कार्यों को ओवरलोड कर सकते हैं

 //plus() => for the + operator //multiply() => for the * operator //leftShift() = for the << operator // ... and so on ... class Fish { def leftShift(Fish fish) { print "You just << (left shifted) some fish " } } def fish = new Fish() def fish2 = new Fish() fish << fish2 

कौन नहीं चाहता / groovy का उपयोग करें? : डी

नहीं, आप जावा में संकलित groovy JARs का उपयोग उसी तरह नहीं कर सकते। यह अभी भी जावा के लिए एक कंपाइलर त्रुटि है।