java - जावा विधि से कई मान लौटें:क्यों एन-टुपल ऑब्जेक्ट्स नहीं?




methods return-type (6)

पैटर्न की एक नई शैली उपलब्ध है, और "सभी असीमित" प्रकृति के साथ फिट बैठती है जिसे आप जावास्क्रिप्ट जैसी भाषाओं में देख सकते हैं।

मेरा बहुत सारे कोड आजकल ऐसा दिखता है :-)

public class Class1 {

    public interface Callback {
       void setData(String item1, String item2);
    }
    public void getThing(Callback callback) {
        callback.setData("a", "b");
    }
}

public class Class2 {

    public void doWithThing(Class1 o) {
        o.getThing(new Class1.Callback() {
            public void setData(String item1, String item2) {
                ... do something with item 1 and item 2 ...
            }
        });
    }

}

इंटरफ़ेस के बाद से कई अतिरिक्त कक्षाएं बनाने के लिए कोई नई वस्तुएं नहीं हैं और ऑब्जेक्ट का आंतरिक वर्ग नहीं है।

यह स्विफ्ट को इतना भयानक बनाता है। कोड इस तरह दिख सकता है:

o.getThing({ item1, item2 -> Void in
    ... do something with item 1 and item 2 ...
});

और चूंकि एकमात्र तर्क ब्लॉक है, यहां तक ​​कि यह भी:

o.getThing { item1, item2 -> Void in
    ... do something with item 1 and item 2 ...
};

जावा को कॉलबैक लडेन कोड को पढ़ने के लिए बहुत आसान बनाने के लिए काम की ज़रूरत है।

जावा भाषा के हिस्से के रूप में, जावा विधि से कई मान वापस करने के लिए, डेवलपर्स के बजाय अपने स्वयं के साधनों जैसे मैप्स, सूचियां, जोड़े इत्यादि का उपयोग करने के बजाय, एक (मानक, जावा प्रमाणित) समाधान क्यों नहीं है। ।? जावा एन-ट्यूपल ऑब्जेक्ट्स का समर्थन क्यों नहीं करता है?

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


चूंकि किसी विधि से एकाधिक मान लौटाते हुए एक अनुशंसित अभ्यास (जावा में) नहीं है।

यदि आपको किसी विधि से असंबंधित मानों की आवश्यकता है, तो आपको उन मानों वाले ऑब्जेक्ट की तरह एक अलग डेटास्ट्रक्चर की आवश्यकता है। यदि आपको एक ही कक्षा (यानी कई स्ट्रिंग्स) के कई उदाहरणों की आवश्यकता है तो आपको अपनी जरूरतों के आधार पर या तो एक सरणी या कुछ संग्रह वापस करने की आवश्यकता है।

अन्य भाषाओं में कई मान लौटाना (उदाहरण के लिए जाएं) उदाहरण के लिए एक एरर कोड लौटने के लिए उपयोग किया जाता है, लेकिन जावा को अपवादों का उपयोग करके अलग-अलग डिज़ाइन किया गया था।


जावा विधियां बिल्कुल शून्य या एक मान वापस आती हैं; यह जावा के लिए मानक है। यदि आपको लौटाए गए कई मानों की आवश्यकता है, तो एकाधिक मानों के साथ एक ऑब्जेक्ट बनाएं और इसे वापस करें।


इसे पूरा करने के लिए बहुत सारे हैकिश तरीके हैं, एक तरीका Object[] वापस करना होगा, लेकिन फिर आपके पास चिंता करने के लिए सूचकांक हैं, और शून्य सूचक जांच, यह सिर्फ बुरा हो जाता है। एक और तरीका एक String वापस करना है, लेकिन फिर आपको इसे पार्स करना होगा, और यह बुरा हो जाता है।

मुझे लगता है कि असली सवाल क्यों है?

यहां रगड़ है - अगर मैं आपके साथ एक परियोजना पर काम कर रहा था, और मैंने इस तरह के व्यवहार को देखा, तो मैं इसे फिर से लिखूंगा ताकि आप देख सकें कि इसे कैसे संभाला जाना चाहिए। यदि आप कोड नमूना प्रदान करते हैं, तो मैं इसे चित्रित करने के लिए पुनः लिखूंगा।

अपनी विधियों को एक ही जिम्मेदारी के साथ लिखें, अगर उन्हें अपनी क्षमता की तुलना में अधिक डेटा वापस करने की आवश्यकता है, तो आपको या तो किसी ऑब्जेक्ट का उपयोग करना चाहिए, या इसे छोटे तरीकों से तोड़ना चाहिए।


यदि आप दो ऑब्जेक्ट्स वापस करना चाहते हैं तो आप आमतौर पर एक ऑब्जेक्ट वापस करना चाहते हैं जो इसके बजाय दो ऑब्जेक्ट्स को एन्सेप्लेट करता है।


from types import MethodType

def method(self):
   print 'hi!'


setattr( targetObj, method.__name__, MethodType(method, targetObj, type(method)) )

इसके साथ, आप स्वयं सूचक का उपयोग कर सकते हैं





java methods return-type