जावा में एक कॉन्वर्स रिटर्न प्रकार क्या है? सामान्य रूप से ऑब्जेक्ट उन्मुख प्रोग्रामिंग में?एक कॉन्वेंट रिटर्न प्रकार क्या है?
उत्तर
कोविरिएंट रिटर्न, इसका मतलब है कि जब कोई एक विधि ओवरराइड करता है, ओवरराइडिंग विधि के रिटर्न प्रकार को ओवरराइड विधि के रिटर्न प्रकार का उप-प्रकार होने की अनुमति दी जाती है।
उदाहरण के साथ इसे स्पष्ट करने के लिए, एक सामान्य मामला Object.clone()
है - जिसे Object
का एक प्रकार वापस करने के लिए घोषित किया गया है। इस प्रकार आप अपनी खुद की कक्षा में इस रद्द कर सकते थे:
public class MyFoo
{
...
// Note covariant return here, method does not just return Object
public MyFoo clone()
{
// Implementation
}
}
लाभ यहाँ है कि किसी भी विधि है जो एक MyFoo वस्तु के लिए एक स्पष्ट संदर्भ रखती clone()
आह्वान करने में सक्षम हो और (कास्टिंग) के बिना पता चल जाएगा है कि वापसी मान MyFoo
का एक उदाहरण है। कॉन्विएन्ट रिटर्न प्रकारों के बिना, माईफू में ओवरराइड विधि को Object
वापस करने के लिए घोषित किया जाना होगा - और इसलिए कॉलिंग कोड को विधि कॉल के परिणाम को स्पष्ट रूप से डाउनकास्ट करना होगा (यहां तक कि दोनों पक्षों को "पता" माना जाता है कि यह केवल एक उदाहरण हो सकता है MyFoo)।
ध्यान दें कि clone()
के बारे में विशेष कुछ भी नहीं है और किसी भी ओवरराइड विधि में एक कॉन्वेंट रिटर्न हो सकता है - मैंने इसे यहां एक उदाहरण के रूप में उपयोग किया क्योंकि यह एक मानक विधि है जहां यह अक्सर उपयोगी होता है।
क्या यह 'सूची
यह कॉन्वेंरिएंट प्रकारों की तुलना में व्यापक रूप से कॉन्वेंट प्रकार है ** वापसी ** प्रकार यहां पूछा गया है। यह वही अंतर्निहित सिद्धांत है, हालांकि - आप 'क्लोन()' की शीर्ष-स्तरीय परिभाषा को 'विधि <शून्य, ऑब्जेक्ट>' के रूप में सोच सकते हैं और पूछ सकते हैं कि अधिक विशिष्ट 'विधि
जेडीके 1.5 की रिहाई से, जावा में कॉन्वेंट प्रकारों को पेश किया गया था। और मैं आपको एक साधारण मामले के साथ समझाऊंगा: जब हम किसी फ़ंक्शन को ओवरराइड करते हैं तो फ़ंक्शन को इसके व्यवहार में परिवर्तन करने की अनुमति है जो आपको अधिकांश पुस्तकों में पढ़ने के लिए मिलता है, लेकिन वे क्या {लेखक] याद करते हैं बाहर यह है कि हम रिटर्न प्रकार भी बदल सकते हैं। स्पष्टीकरण के लिए नीचे दिए गए लिंक की जांच करें, हम तब तक वापसी प्रकार बदल सकते हैं जब तक कि इसे विधि के बेस संस्करण के प्रकार को वापस करने के लिए असाइन किया जा सके।
तो व्युत्पन्न प्रकार लौटने की इस सुविधा covariant कहा जाता है ...
यहाँ एक और सरल उदाहरण है:
Animal
वर्ग
public class Animal {
protected Food seekFood() {
return new Food();
}
}
Dog
वर्ग
public class Dog extends Animal {
@Override
protected Food seekFood() {
return new DogFood();
}
}
यह संभव Dog
की वापसी प्रकार संशोधित करने के लिए है 'DogFood
को रों seekFood()
विधि - Food
का एक उपवर्ग, जिन्हें आप नीचे:
@Override
protected DogFood seekFood() {
return new DogFood();
}
पूरी तरह से एक कानूनी अधिभावी है यही कारण है, और Dog
की वापसी प्रकार' एस seekFood()
विधि कोविरिएंट रिटर्न प्रकार के रूप में जाना जाता है।
कॉन्वेंट रिटर्न प्रकार का मतलब है कि अपने क्लास संदर्भ या उसके बाल वर्ग संदर्भ को वापस करना है। वर्ग जनक { // यह डेटा सदस्य और डेटा विधि शामिल }
class Child extends Parent
{
//it contain data member and data method
//covariant return
public Parent methodName()
{
return new Parent();
or
return Child();
}
}
- जावा में covariant वापसी प्रकार, ओवरराइड विधि की वापसी प्रकार संख्या कम की अनुमति देता है।
- यह सुविधा क्लाइंट साइड पर कास्टिंग करने से बचने में मदद करेगी। यह प्रोग्रामर को प्रकार की जांच और डाउन कास्टिंग के बिना प्रोग्राम करने की अनुमति देता है।
- कॉन्वर्सट रिटर्न प्रकार हमेशा केवल गैर-आदिम रिटर्न प्रकारों के लिए काम करता है।
interface Interviewer {
default Object submitInterviewStatus() {
System.out.println("Interviewer:Accept");
return "Interviewer:Accept";
}
}
class Manager implements Interviewer {
@Override
public String submitInterviewStatus() {
System.out.println("Manager:Accept");
return "Manager:Accept";
}
}
class Project {
public static void main(String args[]) {
Interviewer interviewer = new Manager();
interviewer.submitInterviewStatus();
Manager mgr = new Manager();
mgr.submitInterviewStatus();
}
}
अन्य उदाहरण,
जावा से है UnaryOperator.java
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
/**
* Returns a unary operator that always returns its input argument.
*
* @param <T> the type of the input and output of the operator
* @return a unary operator that always returns its input argument
*/
static <T> UnaryOperator<T> identity() {
return t -> t;
}
}
Function.java
@FunctionalInterface
public interface Function<T, R> {
........
........
........
........
static <T> Function<T, T> identity() {
return t -> t;
}
}
covariant वापसी प्रकार निर्दिष्ट करता है कि वापसी प्रकार जावा 5 से पहले उपवर्ग
class One{
One get(){return this;}
}
class Two extends One{
Two get(){return this;}
void message(){
System.out.println("After Java5 welcome to covariant return type");
}
public static void main(String args[]){
new Two().get().message();
}
}
के रूप में एक ही दिशा में भिन्न हो सकते हैं, यह संभव ओवरराइड वापसी प्रकार बदल कर कोई भी तरीका नहीं था। लेकिन अब, Java5 के बाद से,
यह संभव वापसी प्रकार बदलते उपवर्ग किसी भी विधि जिसका वापसी प्रकार गैर आदिम है लेकिन यह अपनी वापसी प्रकार में परिवर्तन प्रकार उपवर्ग को ओवरराइड करता है, तो द्वारा विधि ओवरराइड करने के लिए है।
- 1. एक साझा_ptr लौटने पर कॉन्वेंट रिटर्न प्रकार कैसे पूरा करें?
- 2. आप एक रिटर्न प्रकार
- 3. सी ++ कॉन्वेंट टेम्पलेट
- 4. ऑब्जेक्ट को अपने उप-वर्गों में परिवर्तित करने के लिए उचित ओओ तरीका क्या है (कॉन्वेंट रिटर्न प्रकार)?
- 5. LINQ क्वेरी का रिटर्न प्रकार क्या है?
- 6. सी ++ में नया प्रकार का रिटर्न प्रकार क्या है?
- 7. आभासी कार्यों के लिए अलग-अलग रिटर्न प्रकार
- 8. परिवर्तनीय, कॉन्वेंट कक्षा में स्कैला क्षेत्र पर निचला प्रकार बाध्य?
- 9. गैर-इकाई रिटर्न प्रकार
- 10. शून्य रिटर्न प्रकार
- 11. रिटर्न प्रकार पर ओवरलोडिंग?
- 12. डब्ल्यूसीएफ रिटर्न प्रकार
- 13. जावा 5+ एपीआई कॉन्वेंट रिटर्न प्रकारों का लाभ क्यों नहीं लेता है?
- 14. विधि रिटर्न प्रकार
- 15. MySQL में SUM() का रिटर्न प्रकार क्या है?
- 16. सी ++: मैं बिना किसी कास्टिंग के विरासत में कक्षाओं में "अवैध कॉन्वेंट रिटर्न प्रकार" से कैसे बच सकता हूं?
- 17. प्रकार 'System.Int32' का अभिव्यक्ति रिटर्न प्रकार 'System.Object'
- 18. एक प्रकार क्या है?
- 19. डब्ल्यूसीएफ, इंटरफ़ेस रिटर्न प्रकार और ज्ञात प्रकार
- 20. क्या रिटर्न एक लूप रोकता है?
- 21. सी ++ आभासी फ़ंक्शन रिटर्न प्रकार
- 22. सी # रिटर्न अलग-अलग प्रकार?
- 23. रिपोजिटरी पैटर्न और रिटर्न प्रकार
- 24. क्या सामान्य जेनेरिक रिटर्न प्रकार के साथ परिभाषित एक इंटरफेस विधि संभव है और एक ठोस कार्यान्वयन रिटर्न प्रकार को परिभाषित करता है?
- 25. रिटर्न प्रकार का प्रभाव स्थिर
- 26. सी ++ टेम्पलेट फ़ंक्शन रिटर्न प्रकार
- 27. जावा जेनरिक और रिटर्न प्रकार
- 28. फ़ंक्शन का डायनामिक रिटर्न प्रकार
- 29. प्रकार 'सिस्टम.डेटाइम' प्रकार का अभिव्यक्ति रिटर्न प्रकार 'सिस्टम.ऑब्जेक्ट'
- 30. गैर-स्थानीय रिटर्न क्या है?
इस ब्लॉग पोस्ट (https://blogs.oracle.com/sundararajan/entry/covariant_return_types_in_java) बताते हैं, बस यहां ज्ञान आधार को जोड़ना। –
@ अखिलजैन: वह ब्लॉग पोस्ट शानदार और सरल है। यह सबसे अच्छा स्पष्टीकरण-उदाहरण है, मैंने कभी देखा है कि जावा कैसे कॉन्वर्स रिटर्न प्रकारों का समर्थन करता है। – kevinarpe
@kevinarpe धन्यवाद, मुझे खुशी है कि यह बहुत से लोगों के लिए सहायक है। –