ইন scala.collection, দুটি খুব অনুরূপ অবজেক্ট JavaConversionsএবং JavaConverters।
- এই দুটি বস্তুর মধ্যে পার্থক্য কী?
- কেন তাদের উভয় অস্তিত্ব আছে?
- আমি কখন একটি বনাম অন্যটি ব্যবহার করতে চাই?
ইন scala.collection, দুটি খুব অনুরূপ অবজেক্ট JavaConversionsএবং JavaConverters।
উত্তর:
সম্পাদনা: স্কেল 2.13.0 এ Java Conversionsপেয়েছে got @deprecatedব্যবহার করুন scala.jdk.CollectionConverters পরিবর্তে।
JavaConversionsঅন্তর্ভুক্ত পদ্ধতিগুলির একটি সিরিজ সরবরাহ করে যা একটি জাভা সংগ্রহ এবং নিকটতম সম্পর্কিত স্কালার সংগ্রহের মধ্যে রূপান্তর করে এবং তদ্বিপরীত। এটি স্ক্র্যাপ ইন্টারফেস বাস্তবায়িত করে এবং অন্তর্নিহিত জাভা সংগ্রহ, বা জাভা ইন্টারফেসে কলগুলি অন্তর্নিহিত স্কালা সংগ্রহটিতে ফরোয়ার্ড করে এমন মোড়ক তৈরি করে তৈরি করা হয়।
JavaConvertersasScalaজাভা সংগ্রহগুলিতে 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)।