ইন scala.collection
, দুটি খুব অনুরূপ অবজেক্ট JavaConversions
এবং JavaConverters
।
- এই দুটি বস্তুর মধ্যে পার্থক্য কী?
- কেন তাদের উভয় অস্তিত্ব আছে?
- আমি কখন একটি বনাম অন্যটি ব্যবহার করতে চাই?
ইন scala.collection
, দুটি খুব অনুরূপ অবজেক্ট JavaConversions
এবং JavaConverters
।
উত্তর:
সম্পাদনা: স্কেল 2.13.0 এ Java Conversions
পেয়েছে got @deprecated
ব্যবহার করুন scala.jdk.CollectionConverters পরিবর্তে।
JavaConversions
অন্তর্ভুক্ত পদ্ধতিগুলির একটি সিরিজ সরবরাহ করে যা একটি জাভা সংগ্রহ এবং নিকটতম সম্পর্কিত স্কালার সংগ্রহের মধ্যে রূপান্তর করে এবং তদ্বিপরীত। এটি স্ক্র্যাপ ইন্টারফেস বাস্তবায়িত করে এবং অন্তর্নিহিত জাভা সংগ্রহ, বা জাভা ইন্টারফেসে কলগুলি অন্তর্নিহিত স্কালা সংগ্রহটিতে ফরোয়ার্ড করে এমন মোড়ক তৈরি করে তৈরি করা হয়।
JavaConverters
asScala
জাভা সংগ্রহগুলিতে asJava
পদ্ধতি এবং স্কালা সংগ্রহগুলিতে পদ্ধতিটি "যুক্ত" করতে পিম্প-মাই-লাইব্রেরি প্যাটার্ন ব্যবহার করে , যা উপরে আলোচিত উপযুক্ত মোড়ক ফিরিয়ে দেয়। এটি (২.৮.১ থেকে সংস্করণ ২.৮.১) থেকে নতুন JavaConversions
এবং স্কালা এবং জাভা সংগ্রহের মধ্যে রূপান্তরকে স্পষ্ট করে তোলে। ডেভিড তার উত্তরে যা লিখেছেন তার বিপরীতে, আমি আপনাকে এটি ব্যবহার করার অভ্যাস করার পরামর্শ দিচ্ছি JavaConverters
কারণ আপনি কোড লিখতে খুব কম হবেন যা অনেকগুলি অন্তর্নিহিত রূপান্তর তৈরি করে, কারণ আপনি কেবল যেখানে স্পষ্ট হবে সেখানে নিয়ন্ত্রণ করতে পারবেন : আপনি যেখানে লিখবেন .asScala
বা .asJava
।
এখানে রূপান্তর পদ্ধতিগুলি JavaConverters
সরবরাহ করে:
Pimped Type | Conversion Method | Returned Type
=================================================================================================
scala.collection.Iterator | asJava | java.util.Iterator
scala.collection.Iterator | asJavaEnumeration | java.util.Enumeration
scala.collection.Iterable | asJava | java.lang.Iterable
scala.collection.Iterable | asJavaCollection | java.util.Collection
scala.collection.mutable.Buffer | asJava | java.util.List
scala.collection.mutable.Seq | asJava | java.util.List
scala.collection.Seq | asJava | java.util.List
scala.collection.mutable.Set | asJava | java.util.Set
scala.collection.Set | asJava | java.util.Set
scala.collection.mutable.Map | asJava | java.util.Map
scala.collection.Map | asJava | java.util.Map
scala.collection.mutable.Map | asJavaDictionary | java.util.Dictionary
scala.collection.mutable.ConcurrentMap | asJavaConcurrentMap | java.util.concurrent.ConcurrentMap
—————————————————————————————————————————————————————————————————————————————————————————————————
java.util.Iterator | asScala | scala.collection.Iterator
java.util.Enumeration | asScala | scala.collection.Iterator
java.lang.Iterable | asScala | scala.collection.Iterable
java.util.Collection | asScala | scala.collection.Iterable
java.util.List | asScala | scala.collection.mutable.Buffer
java.util.Set | asScala | scala.collection.mutable.Set
java.util.Map | asScala | scala.collection.mutable.Map
java.util.concurrent.ConcurrentMap | asScala | scala.collection.mutable.ConcurrentMap
java.util.Dictionary | asScala | scala.collection.mutable.Map
java.util.Properties | asScala | scala.collection.mutable.Map[String, String]
সরাসরি জাভা থেকে রূপান্তরগুলি ব্যবহার করার জন্য, আপনি সরাসরি থেকে কল করার পদ্ধতিগুলি থেকে ভাল JavaConversions
; উদাহরণ:
List<String> javaList = new ArrayList<String>(Arrays.asList("a", "b", "c"));
System.out.println(javaList); // [a, b, c]
Buffer<String> scalaBuffer = JavaConversions.asScalaBuffer(javaList);
System.out.println(scalaBuffer); // Buffer(a, b, c)
List<String> javaListAgain = JavaConversions.bufferAsJavaList(scalaBuffer);
System.out.println(javaList == javaListAgain); // true
JavaConversions
সেগুলির মতো অন্তর্নিহিত রূপান্তরগুলি সুবিধাজনক, আপনি সংকলক দ্বারা inোকানো যেতে পারে এমন সমস্ত জায়গাগুলি আপনি দ্রুত উপেক্ষা করতে পারেন। আপনি সেই জায়গাগুলি নিয়ন্ত্রণ করেন JavaConverters
। সুস্পষ্ট রূপান্তরিত স্পষ্ট রূপান্তর সম্পর্কে এটি পুরো আলোচনা।
import JavaConversions._
রূপান্তর ঘটে না তাই যা রূপান্তরিত হয় তার উপর আপনার নিয়ন্ত্রণ থাকে। আপনি যদি আমদানিটি সঠিকভাবে রাখেন (কেবলমাত্র যখন প্রয়োজন হয়), যেখানে রূপান্তরটি হয়েছে সেখানে আপনার সম্পূর্ণ নিয়ন্ত্রণ থাকবে।
JavaConverters
অতিরিক্ত সুরক্ষা রয়েছে যা আপনি এটি স্পষ্টভাবে না লিখলে কিছুই ঘটে না। এটি একটি অতিরিক্ত সুরক্ষা এবং সম্ভবত এই কারণেই এই শ্রেণিটি যুক্ত হয়েছিল।
স্কাল 2.12.x থেকে যে কেউ এই প্রশ্নে অবতরণ করছে, তার JavaConversions
জন্য এখন অবহেলিত এবং JavaConverters
এটি পছন্দসই পদ্ধতি।
JavaConverters
অবচিত হ'ল, এবং scala.jdk.CollectionConverters
এটি পছন্দসই পদ্ধতি;)
স্কেলা ২.১13-এ, এর পক্ষে অবচিতJavaConverters
করা হয়েছে :scala.jdk.CollectionConverters
...
scala.jdk
অবজেক্টস সহ নতুন প্যাকেজCollectionConverters
(collection.JavaConverters
২.১২ এর মতো ক্লাসিক জাভা সংগ্রহ )StreamConverters
,FunctionConverters
এবংOptionConverters
...
যেমন এপিআই-তে ব্যাখ্যা করা হয়েছে, JavaConversions
এটি অন্তর্নিহিত রূপান্তরগুলির একটি সেট যা জাভা সংগ্রহগুলি সম্পর্কিত স্কেল সংগ্রহগুলিতে রূপান্তর করে।
আপনি এটি দিয়ে ব্যবহার করতে পারেন import collection.JavaConversions._
। যখন প্রয়োজনীয় হবে, সংকলকটি স্বয়ংক্রিয়ভাবে জাভা সংগ্রহটি ডান স্কালার ধরণে রূপান্তর করবে।
JavaConverters
সাজসজ্জারীর একটি সেট যা জাভা বা স্কাল সংগ্রহগুলি স্কেল বা জাভা সংগ্রহগুলিতে স্কেল বা জাভা সংগ্রহগুলিতে রূপান্তর করতে সহায়তা করে asScala
বা asJava
পদ্ধতিগুলি যা আপনি যে রূপান্তর করতে চান সেই সংকলনে স্পষ্টভাবে যুক্ত হবে। এই রূপান্তরকারীগুলি ব্যবহার করার জন্য, আপনাকে আমদানি করতে হবে:
import collection.JavaConverters._
JavaConversions
এটি ব্যবহার করা সহজ হিসাবে আপনার পছন্দ করা উচিত (ব্যবহার করার প্রয়োজন নেই asScala
বা asJava
)।