"টাইপ ইরেজর" শব্দটি জেনেরিক্সের সাথে জাভা সমস্যার সঠিক বর্ণনা নয়। প্রকার মুছে ফেলা কোনও খারাপ জিনিস নয়, কার্য সম্পাদনের জন্য এটি অত্যন্ত প্রয়োজনীয় এবং প্রায়শই C ++, হাস্কেল, ডি এর মতো বেশ কয়েকটি ভাষায় ব্যবহৃত হয় Type
আপনি ঘৃণা করার আগে দয়া করে উইকি থেকে মুছে ফেলার সঠিক সংজ্ঞাটি প্রত্যাহার করুন
টাইপ ইরেজোর কী?
প্রকার মুছে ফেলা লোড-টাইম প্রক্রিয়াটিকে বোঝায় যা দ্বারা চালিত সময়ে কার্যকর হওয়ার আগে কোনও প্রোগ্রাম থেকে সুস্পষ্ট প্রকারের টীকাগুলি সরিয়ে ফেলা হয়
টাইপ ইরেজরের অর্থ ডিজাইন সময়ে তৈরি টাইপ ট্যাগগুলি ফেলে দেওয়া বা সংকলনের সময় ইনফেরার্ড টাইপ ট্যাগগুলি ফেলে দেওয়া যেমন বাইনারি কোডের সংকলিত প্রোগ্রামটিতে কোনও প্রকারের ট্যাগ থাকে না। এবং প্রতিটি প্রোগ্রামিং ভাষার ক্ষেত্রে বাইনারি কোড সংকলনের ক্ষেত্রে এমন কিছু ক্ষেত্রে বাদে যেখানে আপনার রানটাইম ট্যাগের প্রয়োজন আছে। এই ব্যতিক্রমগুলির মধ্যে রয়েছে সমস্ত অস্তিত্বের ধরণের উদাহরণ (জাভা রেফারেন্স প্রকার যা সাব-টাইপযোগ্য, অনেক ভাষায় যেকোন প্রকারের, ইউনিয়ন প্রকারের)। প্রকার মুছে ফেলার কারণ হ'ল প্রোগ্রামগুলি এমন একটি ভাষায় রূপান্তরিত হয় যা কোনও ধরণের ইউনি টাইপড (বাইনারি ভাষা কেবল বিটকে অনুমতি দেয়) প্রকারগুলি কেবল বিমূর্ততা হয় এবং এর মানগুলির জন্য কাঠামো এবং সেগুলি পরিচালনা করার জন্য উপযুক্ত শব্দার্থতত্ত্বকে জোড় করে।
সুতরাং এটি ফিরতি, একটি স্বাভাবিক প্রাকৃতিক জিনিস।
জাভার সমস্যাটি আলাদা এবং এটি কীভাবে পুনরায় সংঘটিত হয় তার কারণ।
জাভা সম্পর্কে প্রায়শই দেওয়া বিবৃতিগুলিতে রিফাইড জেনারিক থাকে না তাও ভুল।
জাভা সংশোধন করে তবে পিছনে সামঞ্জস্যের কারণে একটি ভুল উপায়ে।
সংশোধন কী?
আমাদের উইকি থেকে
রেফারেশন হল এমন একটি প্রক্রিয়া যার মাধ্যমে একটি কম্পিউটার প্রোগ্রাম সম্পর্কে একটি বিমূর্ত ধারণা একটি স্পষ্ট ডেটা মডেল বা কোনও প্রোগ্রামিং ভাষায় তৈরি অন্যান্য অবজেক্টে রূপান্তরিত হয়।
রিফাইজেশন বলতে কিছু বিমূর্ত (প্যারামেট্রিক টাইপ) কে বিশেষায়িত করে কংক্রিটের (কংক্রিটের ধরণ) রূপান্তর করা।
আমরা একটি সাধারণ উদাহরণ দ্বারা এটি ব্যাখ্যা:
সংজ্ঞা সহ একটি অ্যারেলিস্ট:
ArrayList<T>
{
T[] elems;
...//methods
}
একটি বিমূর্ততা, বিশদভাবে একটি প্রকার নির্মাতা, যা কংক্রিটের সাথে বিশেষীকরণের পরে "পুনরায় সংশোধিত" হয়ে যায়, পূর্ণসংখ্যা বলে:
ArrayList<Integer>
{
Integer[] elems;
}
ArrayList<Integer>
সত্যিই যেখানে একটি টাইপ।
তবে জাভা যা করেন না ঠিক এই জিনিসটি !!! পরিবর্তে, তারা তাদের সীমানা সহ ক্রমাগত বিমূর্ত প্রকারগুলি সংশোধন করে, অর্থাত্ বিশেষায়নের জন্য প্রদত্ত প্যারামিটারগুলির চেয়ে পৃথক একই কংক্রিট প্রকারের উত্পাদন করে:
ArrayList
{
Object[] elems;
}
যা এখানে অন্তর্নিহিত বাউন্ড অবজেক্ট ( ArrayList<T extends Object>
== ArrayList<T>
) দিয়ে সংশোধিত হয়েছে ।
তা সত্ত্বেও এটি জেনেরিক অ্যারেগুলি অকেজো করে তোলে এবং কাঁচা ধরণের জন্য কিছু অদ্ভুত ত্রুটি ঘটায়:
List<String> l= List.<String>of("h","s");
List lRaw=l
l.add(new Object())
String s=l.get(2) //Cast Exception
এটি হিসাবে অস্পষ্টতা অনেক কারণ
void function(ArrayList<Integer> list){}
void function(ArrayList<Float> list){}
void function(ArrayList<String> list){}
একই ফাংশন পড়ুন:
void function(ArrayList list)
এবং তাই জেনেরিক পদ্ধতি ওভারলোডিং জাভাতে ব্যবহার করা যাবে না।