বিষয়টি নিয়ে
List<String> list = new LinkedList();
এটি কি বাম দিকে, আপনি জেনেরিক টাইপটি ব্যবহার করছেন List<String>
যেখানে ডানদিকে আপনি কাঁচা টাইপ ব্যবহার করছেন LinkedList
। জাভাতে কাঁচা প্রকারগুলি কার্যকরভাবে পূর্ব-জেনেরিক কোডের সাথে সামঞ্জস্যের জন্য বিদ্যমান এবং আপনার সম্পূর্ণরূপে যদি না হয় তবে নতুন কোডে কখনই ব্যবহার করা উচিত নয়।
এখন, জাভা যদি প্রথম থেকেই জেনেরিকস থাকে এবং এর ধরণ না থাকে, যেমন LinkedList
, জেনারিক হওয়ার আগে এটি মূলত তৈরি করা হয়েছিল, সম্ভবত এটি এটি তৈরি করতে পারত যাতে জেনেরিক ধরণের নির্মাতা স্বয়ংক্রিয়ভাবে বাম দিক থেকে তার ধরণের পরামিতিগুলি আবিষ্কার করে ers - যদি সম্ভব হয় তবে অ্যাসাইনমেন্টের পাশে। তবে এটি তা করেনি এবং পিছনের সামঞ্জস্যের জন্য এটি অবশ্যই কাঁচা ধরণের এবং জেনেরিক প্রকারকে আলাদাভাবে আচরণ করবে। এটি তাদের সামান্য আলাদা , তবে সমানভাবে সুবিধাজনক, জেনেরিক অবজেক্টের ধরণের পরামিতিগুলির পুনরাবৃত্তি না করে কোনও নতুন উদাহরণ ঘোষণার উপায়টি বজায় রাখে ... হীরা অপারেটর।
আপনার মূল উদাহরণ হিসাবে List<String> list = new LinkedList()
, সংকলকটি এই নিয়োগের জন্য একটি সতর্কতা উত্পন্ন করে কারণ এটি অবশ্যই। এই বিবেচনা:
List<String> strings = ... // some list that contains some strings
// Totally legal since you used the raw type and lost all type checking!
List<Integer> integers = new LinkedList(strings);
জেনেরিকস ভুল কাজ করার বিরুদ্ধে সংকলন-সময় সুরক্ষা প্রদান করার জন্য বিদ্যমান। উপরের উদাহরণে, কাঁচা টাইপ ব্যবহার করার অর্থ আপনি এই সুরক্ষা পান না এবং রানটাইম এ ত্রুটি পাবেন। এজন্য আপনার কাঁচা ধরণের ব্যবহার করা উচিত নয়।
// Not legal since the right side is actually generic!
List<Integer> integers = new LinkedList<>(strings);
ডায়মন্ড অপারেটর, তবে, বাম পাশের মতো একই ধরণের প্যারামিটারগুলির সাথে অ্যাসাইনমেন্টের ডান হাতটিকে সত্য জেনেরিক উদাহরণ হিসাবে সংজ্ঞায়িত করার অনুমতি দেয় ... আবার সেই পরামিতিগুলি টাইপ না করেই। এটি আপনাকে কাঁচা টাইপ ব্যবহার করার মতো প্রায় একই প্রচেষ্টার সাথে জেনেরিকের সুরক্ষা রাখতে দেয় ।
আমি মনে করি মূল বিষয়টি বুঝতে হবে যে কাঁচা ধরণের (না সহ <>
) জেনেরিক প্রকারের মতো চিকিত্সা করা যায় না। আপনি যখন কোনও কাঁচা প্রকার ঘোষণা করেন, আপনি জেনেরিকগুলির কোনও সুবিধা এবং টাইপ চেকিংয়ের কিছুই পাবেন না। আপনাকে এও মনে রাখতে হবে যে জেনেরিকগুলি জাভা ভাষার একটি সাধারণ উদ্দেশ্য অংশ ... তারা কেবলমাত্র নো-আর্গ নির্মাণকারীদের ক্ষেত্রে প্রয়োগ করে না Collection
!