जावा 8 में, यह इंटरफ़ेस या अमूर्त वर्ग के बजाय CompletableFuture
लौटने Future
लौटने एपीआई को परिभाषित करने के लिए बेहतर है? को ध्यान में रखते it is ugly converting Future
to CompletableFuture
और तथ्य यह है कि फोन करने वाले CompletableFuture
कार्यात्मक शैली सीधे का उपयोग कर के और अधिक लचीलापन दे देंगे, क्या कर सकता है एक API बस वापस जाने के लिए Future
के लिए एक अच्छा कारण हो सकता है?क्या एपीआई को परिभाषित करते समय मैं CompletableFuture या भविष्य वापस कर सकता हूं?
7
A
उत्तर
3
मेरे 2 सीटीएस:
- एक भविष्य वापस लौट कर, आप अपने विकल्पों को खुला रखने और एक भविष्य, या एक CompletableFuture लौट सकते हैं - यह फोन करने वाले के नजरिए से कोई फर्क नहीं पड़ता।
- एक CompletableFuture वापस लौट कर, आप कॉलर और अधिक विकल्प दे (वे और अधिक तरीकों मिल) लेकिन आप यह भी भविष्य के प्रकार लौटने के लिए प्रतिबद्ध - अगर दो साल में आपको लगता है कि एक BetterFuture लौटने अधिक मतलब होता है, आप करना होगा एपीआई बदलें, जो अच्छा नहीं है।
तो आपको संभवत: भविष्य में एक पूर्ण भविष्य के अलावा कुछ और वापस करना चाहते हैं (हहा) की संभावना का आकलन करना चाहिए और तदनुसार निर्णय लेना चाहिए।
1
सोचा मैं यह करने के लिए वापस आने के लिए और अपने अंतिम निर्णय पर कुछ अपडेट प्रदान करेगा:
मेरे अपने कोड/डिजाइन के लिए, मैं, वापसी प्रकार के रूप में CompletableFuture
उपयोग करने के साथ चला गया क्योंकि
- यह है एक
protected abstract
एक आंतरिक भाग की विधि जिसे मैं एक्स्टेंसिबल बनाना चाहता हूं; - मुझे बाइंडिंग को परिभाषित करने के लिए एक इंटरफ़ेस की आवश्यकता नहीं है;
- इस रिटर्न प्रकार का मुख्य उद्देश्य एक भविष्य है (एसिंक आईओ के लिए), मुझे व्यक्तिगत रूप से लगता है कि
CompletableFuture
द्वारा प्रदान की गई कार्यात्मक स्टाइल एपीआई भविष्य के देवताओं को कार्यात्मक शैली का उपयोग करने का एक अतिरिक्त लाभ/अनुस्मारक/प्रोत्साहन है।
कहा जा रहा है, मैं निश्चित रूप से वापसी प्रकार के रूप में CompletableStage
इंटरफ़ेस का उपयोग होता है, मैं एक सार्वजनिक एपीआई को डिजाइन किया गया था, क्योंकि:
- क्या @assylias और @Holger इंटरफ़ेस बनाम के बारे में कहा वसूली और चेनिंग क्षमता
- और तथ्य यह है
CompletableStage
एक विधिCompletableFuture<T> toCompletableFuture()
है।
संबंधित मुद्दे
- 1. क्या मैं एक सी ++ मैक्रो को फिर से परिभाषित कर सकता हूं, फिर इसे वापस परिभाषित कर सकता हूं?
- 2. रिटर्न CompletableFuture <Void> या CompletableFuture <?>?
- 3. जावा 8 CompletableFuture बनाम Netty भविष्य
- 4. क्या मैं इसे संदर्भित करते समय पैरामीटर परिभाषा ऑब्जेक्ट के गुणों को ओवरराइड कर सकता हूं?
- 5. किसी स्पॉन्डेड कमांड से आउटपुट पाइप करते समय मैं एक त्रुटि कैसे वापस कर सकता हूं?
- 6. CompletableFuture?
- 7. ISQLQuery.UniqueResult <DateTime>() करते समय मैं SQLite को उचित दिनांक समय कैसे वापस कर सकता हूं?
- 8. क्या मैं मॉलोक पर वापस भरोसा कर सकता हूं?
- 9. क्या मैं फ़ंक्शन में डबल * वापस कर सकता हूं?
- 10. मैं मेकफ़ाइल में उपयोगकर्ता परिभाषित फ़ंक्शन से मूल्य कैसे पास कर सकता हूं और वापस कर सकता हूं?
- 11. केस की अनदेखी करते समय कोई enum परिभाषित किया गया है या नहीं, तो मैं कैसे परीक्षण कर सकता हूं?
- 12. विंडबग में, मैं डीबगिंग करते समय गणना के मूल्यों को कैसे सूचीबद्ध कर सकता हूं?
- 13. मैं फ़ील्ड सीमा रंग को कैसे परिभाषित कर सकता हूं?
- 14. मैं LINQ में चर को कैसे परिभाषित कर सकता हूं?
- 15. क्या मैं इसका उपयोग करने या वापस करने का प्रयास करते समय एनम मूल्य कास्टिंग करने से बच सकता हूं?
- 16. oauth करते समय मैं पॉपअप विंडो कैसे बना सकता हूं?
- 17. इंटेलिजे आईडीईए में मल्टीलाइन स्टेटमेंट्स स्वरूपित करते समय, क्या मैं ऑपरेटरों को संरेखित कर सकता हूं?
- 18. क्या मैं पाइथन को विस्तारित करते समय सी ++ सुविधाओं का उपयोग कर सकता हूं?
- 19. क्या मैं एरलांग में प्रोग्रामिंग करते समय थ्रेड सुरक्षा को अनदेखा कर सकता हूं?
- 20. क्या मैं गिटब में "रिलीज" बना सकता हूं जैसे कि जीथ्यूब का उपयोग करते समय मैं कर सकता हूं?
- 21. कमांड लाइन से रेल ऐप को पुनरारंभ करते समय मैं पर्यावरण को कैसे परिभाषित कर सकता हूं?
- 22. क्या मैं इसे प्रस्तुत करते समय ड्रूपल को एक फॉर्म फिर से बना सकता हूं?
- 23. क्या मैं एक ही समय में रीबेज कर सकता हूं और स्क्वैश कर सकता हूं?
- 24. मैं एक स्कोप्ड लॉक कैसे वापस कर सकता हूं?
- 25. क्या मैं स्ट्रिंग # लंबाई को फिर से परिभाषित कर सकता हूं?
- 26. मैं "डू-नथिंग" सॉर्ट कैसे परिभाषित कर सकता हूं?
- 27. क्या मैं सफाई नियमों को ग्रहण करने के लिए अपवादों को परिभाषित कर सकता हूं?
- 28. CompletableFuture?
- 29. मैं एक संपत्ति सेटर को कैसे ओवरराइड कर सकता हूं?
- 30. क्या मैं साझा पुस्तकालयों को जोड़ते समय जीसीसी को स्थिर पुस्तकालयों को अनदेखा कर सकता हूं?
मैं सिर्फ इस प्रश्न पूछा 2 मिनट पहले और पहले से ही 1 पास वोट? प्रोग्रामिंग/डिज़ाइन विकल्पों के लिए वास्तविक उपयोग के मामलों के बारे में पूछने में क्या गलत है? – derrdji
मुझे लगता है कि यह थोड़ा सा व्यापक होगा। हो सकता है कि उपयोग का मामला क्या है? –
उपयोग के मामले मैं उस फ़ाइल की प्रोसेसिंग करता है एक async एपीआई को डिजाइन कर रहा हूँ, मेरे अतीत के ज्ञान मुझसे कहता है भविष्य वापस जाने के लिए करने के लिए है, लेकिन अन्य तो सवाल मैं जुड़ा हुआ से सीखने के बाद, मैं Java8 की तरह महसूस मुझे CompletableFuture वापस जाने के लिए कह रहा है। मुझे यकीन नहीं है, और मदद की ज़रूरत है। –
derrdji