Why did Java 8 introduce a new "::" operator for method references? -


जावा 8 विधि संदर्भों में :: ऑपरेटर का उपयोग करके किया जाता है।

उदाहरण के लिए

  // क्लास जो इसके माध्यम से स्थिर विधि सार्वजनिक वर्ग addableUtil {सार्वजनिक स्थिर इंट addThemUp (int i1, int I2) {वापसी i1 + i2; }} // टेस्ट क्लास पब्लिक क्लास AddableTest {// लम्बा अभिव्यक्ति एक अलग वर्ग पर स्थिर विधि का उपयोग कर IAddable addableViaMethodReference = AddableUtil :: addThemUp; ...}  

आप देख सकते हैं कि addableViaMethodReference अब AddableUtil :: addThemUp के लिए उपनाम की तरह काम करता है। तो addableViaMethodReference () उसी कोड को AddableUtil.addThemUp () के रूप में कार्य करेगा और उसी मान को वापस करेगा।

वे एक नया एक मौजूदा एक का उपयोग करने के बजाय ऑपरेटर? मेरा मतलब है, एक समारोह निष्पादित करें जब फ़ंक्शन का नाम () के साथ समाप्त होता है और फ़ंक्शन संदर्भ वापस नहीं देता जब कोई अनुक्रमिक नहीं है ()

विधि निष्पादन

  AddableUtil.addThemUp ();  

विधि संदर्भ

  AddableUtil.addThemUp;  

क्या यह बहुत आसान और सहज नहीं होगा? AFAIK, AddableUtil.addThemUp वर्तमान में (जावा 7) किसी अन्य उद्देश्य की सेवा नहीं करता है और एक संकलन त्रुटि फेंकता है। क्यों एक पूरी तरह से नए ऑपरेटर बनाने के बजाय उस अवसर का उपयोग नहीं करें?

जावा 8, लेकिन एक नए ऑपरेटर के बिना अस्पष्ट होगा:

  आयात करें java.util.function.IntBinaryOperator; सार्वजनिक वर्ग ए {सार्वजनिक स्थिर IntBinaryOperator addThemUp; सार्वजनिक स्थैतिक इंट ऐड-अप (इंट आई 1, इंट आई 2) {रिटर्न i1 + i2; } सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] args) अपवाद फेंकता {IntBinaryOperator ऑपरेटर = ए :: addThemUp; }}  

यह स्पष्ट नहीं होगा कि A.addThemUp सार्वजनिक IntBinaryOperator फ़ील्ड को संदर्भित करता है या एक विधि संदर्भ।

हां, यह थोड़ा सा contrived है। लेकिन आप प्रोग्रामिंग भाषा सिंटैक्स में बढ़त के मामलों की अनुमति नहीं दे सकते।


Comments