2015-02-18 13 views
14

जावा 8 में CompletableFutures की शुरूआत scala.concurrent.Future में उपलब्ध भाषा सुविधाओं को लाया गया जैसे कि मोनैडिक ट्रांसफॉर्मेशन।स्कैला फ्यूचर्स और जावा 8 CompletableFuture

  • क्या अंतर है, और क्यों एक स्काला डेवलपर जावा 8 CompletableFuture से अधिक स्काला फ्यूचर्स को प्राथमिकता देनी चाहिए?

  • क्या akka.dispatch पुल के माध्यम से जावा में scala.concurrent.Future का उपयोग करने के अभी भी अच्छे कारण हैं?

+0

इमो, क्योंकि CompletableFuture पर मोनैडिक ऑपरेशंस को मॉनिडिक परिचालनों के साथ सुसंगत रूप से परिभाषित नहीं किया गया है न तो जावा 8 में और न ही स्कैला संग्रह में - इसलिए अर्थपूर्ण संगत नहीं है। और मेरे लिए भी इस तरह के अर्थपूर्ण बहुत अनावश्यक लगता है। + आपको जावा-स्काला इंटरऑपरेबिलिटी से किसी भी लाभ के बिना निपटना होगा। – dk14

+0

क्या आप उत्तर के साथ अपनी टिप्पणी का विस्तार कर सकते हैं? जावा में स्कैला वायदा का उपयोग करने के लिए akka.dispatch पुल के बारे में क्या? – Edmondo1984

+0

1) मेरा मतलब यह है कि CompletableFuture पर कोई 'स्ट्रीम' विधि नहीं है, इसलिए आप सामान्य रूप से मानचित्र-कमी (और फ़िल्टर जैसे परिणाम जैसे) को कॉल नहीं कर सकते हैं - कुछ बदसूरत विधियों का उपयोग करना होगा। पाठ्यक्रम के परिसर भविष्य के लिए भी कोई समझ नहीं है। मैंने अभ्यास में पूर्ण भविष्य का उपयोग नहीं किया (यह बहुत बदसूरत है) - इसलिए आपके प्रश्न का पूरी तरह से जवाब नहीं दे सकता 2) जैसा कि मैं समझता हूं कि विषय स्कैला में जावा के वायदा के बारे में है। – dk14

उत्तर

11

क्या अंतर है, और क्यों एक स्काला डेवलपर जावा 8 CompletableFuture से अधिक स्काला फ्यूचर्स को प्राथमिकता देनी चाहिए?

टिप्पणियों में उल्लिखित @ dk14 ने बताया कि CompletableFuture में idiomatic Scala api नहीं है।

स्केला डेवलपर के लिए निहितार्थ हैं:

  • तथ्य यह है कि यह monadic प्रकार
  • जावा-स्केला इंटरॉप भूमि के ऊपर जब के बड़े भाग का उपयोग कर की जरूरत के लिए स्काला विधि परंपराओं का पालन नहीं करता है आम की वजह से comprehensions के लिए की कमी यह तरीकों

है यह भी ध्यान देने योग्य बात है कि जावा CompletableFuture स्केला Future के बिल्कुल बराबर नहीं है लायक है। यह स्केल Future और Promise का एक फ्यूज है।

ऊपर सूचीबद्ध विपक्ष को ध्यान में रखते हुए स्केल में CompletableFuture का उपयोग करने में बहुत अधिक समझ नहीं है जब तक कि आप सार्वजनिक एपीआई डिज़ाइन नहीं कर रहे हैं जो जावा के साथ सहजता से अंतःक्रियात्मक होना चाहिए।

क्या अभी भी scala.concurrent का उपयोग करने के अच्छे कारण हैं। जावा में भविष्य akka.dispatch पुल के माध्यम से?

मैं विशेष रूप से, कारणों जावा में akka.dispatch उपयोग करने के लिए देख रहा हूँ वहाँ अभी भी कर रहे हैं किसी भी

अक्का स्केला के शीर्ष पर निर्माण है और यह कभी कभी स्केला का उपयोग करता Future रों है। इसका मतलब यह है कि जब आपके पास जावा में लिखे गए कोड का कुछ हिस्सा होता है तो इसे स्कैला एपीआई (akka.dispatch जावा एपीआई के साथ) में लपेटने के लायक है ताकि इसे आसानी से अक्का के साथ उपयोग किया जा सके।

उदाहरण के लिए, आप जावा में अक्का अभिनेता को कार्यान्वित कर रहे हैं। संदेश संसाधित करते समय आप कुछ गैर-अवरुद्ध पढ़ने को करना चाहते हैं, जब किया जाता है, तो परिणाम को किसी अन्य अभिनेता को संदेश के रूप में प्रस्तुत करना चाहिए।

क्या तुम कर सकते हो जावा Callable में अपने आई/ओ डाल करने के लिए, तो akka.dispatch.Futures#future का उपयोग इससे बाहर स्केला Future प्राप्त करने के लिए है, और फिर आप भविष्य के परिणाम कुछ के लिए एक संदेश के रूप में वितरित किया बनाने के लिए अक्का pipe का लाभ उठाने सकता है अभिनेता।

संबंधित मुद्दे