এমন বেশ কয়েকটি কেস রয়েছে যেখানে আপনি অপরিবর্তনীয় মানচিত্র, তালিকা, সেট বা অন্যান্য ধরণের সংগ্রহ ব্যবহার করতে পছন্দ করবেন using
প্রথম এবং তর্কযোগ্যভাবে সবচেয়ে গুরুত্বপূর্ণ ব্যবহারের ক্ষেত্রে হ'ল আপনি যখনই কোনও ক্যোয়ারির ফলাফল বা কোনও গণনার ফলাফলের সেট (বা তালিকা বা মানচিত্র) ফিরিয়ে দেন, আপনার অপরিবর্তনীয় ডেটা স্ট্রাকচার ব্যবহার করতে পছন্দ করা উচিত।
এই ক্ষেত্রে, আমি এগুলির অপরিবর্তনীয় সংস্করণগুলিতে ফিরে আসতে পছন্দ করি কারণ এটি কোনও গণনার ফলাফলের প্রকৃত অপরিবর্তনীয়তা আরও স্পষ্টভাবে প্রতিফলিত করে - আপনি ডেটা নিয়ে পরবর্তী সময়ে যা কিছু করেন না কেন, আপনার কোয়েরি থেকে প্রাপ্ত ফলাফলের সেটটি আপনার উচিত নয় পরিবর্তন.
দ্বিতীয় সাধারণ ব্যবহারের ক্ষেত্রে হ'ল যখন আপনাকে কোনও পদ্ধতি বা পরিষেবাতে ইনপুট হিসাবে যুক্তি সরবরাহ করতে হয়। আপনি যদি না প্রত্যাশা করেন যে ইনপুট সংগ্রহটি পরিষেবা বা পদ্ধতিতে (যা সাধারণত একটি সত্যই খারাপ নকশার ধারণা) দ্বারা পরিবর্তিত হয়, তবে পরিবর্তনীয় পরিবর্তে অপরিবর্তনীয় সংগ্রহে পাস করা অনেক ক্ষেত্রে যুক্তিসঙ্গত এবং নিরাপদ পছন্দ হতে পারে।
আমি এটি "মান দ্বারা পাস" কনভেনশন হিসাবে মনে করি ।
আরও সাধারণভাবে - যখনই ডেটা মডিউল বা পরিষেবা সীমানা অতিক্রম করে তখনই অপরিবর্তনীয় ডেটা স্ট্রাকচারগুলি ব্যবহার করা একটি বুদ্ধিমান অভ্যাস। (অপরিবর্তনীয়) ইনপুট / আউটপুট এবং মিউটেটেবল অভ্যন্তরীণ অবস্থার মধ্যে পার্থক্য সম্পর্কে যুক্তিযুক্ত করা এটি আরও সহজ করে তোলে।
এর একটি খুব উপকারী পার্শ্ব প্রতিক্রিয়া হিসাবে আপনার মডিউল / পরিষেবাগুলির সুরক্ষা এবং থ্রেড সুরক্ষা বৃদ্ধি পেয়েছে এবং উদ্বেগের পরিষ্কার বিচ্ছিন্নতা নিশ্চিত করে।
Collections.empty*()
পদ্ধতিগুলি ব্যবহারের আর একটি ভাল কারণ হ'ল তাদের ভারবোসেসের লক্ষণীয় অভাব। জাভা-পূর্বের যুগে আপনার যদি জেনেরিক সংগ্রহ থাকে তবে আপনাকে জেনেরিক ধরণের টীকাগুলি পুরো জায়গাতে ছিটিয়ে দিতে হয়েছিল।
কেবলমাত্র এই দুটি ঘোষণার তুলনা করুন:
Map<Foo, Comparable<? extends Bar>> fooBarMap = new HashMap<Foo, Comparable<? extends Bar>>();
বনাম:
Map<Foo, Comparable<? extends Bar>> fooBarMap = Collections.emptyMap();
দ্বিতীয়টি স্পষ্টতই দুটি গুরুত্বপূর্ণ উপায়ে পঠনযোগ্যতার উপর হাতছাড়া করে:
- প্রথম ঘোষণায়, একটি খালি মানচিত্রের পুরো তাত্ক্ষণিক জেনেরিক প্রকারের ঘোষণার শব্দে কবর দেওয়া হয়, একটি অপরিহার্যভাবে তুচ্ছ ঘোষণাকে এটির চেয়ে অনেক বেশি গোপনীয় করে তোলে।
- ডানদিকে জেনেরিক ধরণের টীকাটির উল্লেখযোগ্য অভাব ছাড়াও, দ্বিতীয় সংস্করণে স্পষ্টভাবে বলা হয়েছে যে মানচিত্রটি একটি খালি মানচিত্রে সূচনা করা হয়েছে। তদ্ব্যতীত - এই পদ্ধতিটি একটি অপরিবর্তনীয় মানচিত্রকে ফিরিয়ে দেয় তা জেনেও, এখন সন্ধানের দ্বারা আমার কাছে
fooBarMap
আর একটি অমূল্য মান নির্ধারিত হচ্ছে এটি সন্ধান করা আরও সহজ /fooBarMap =/
।