আপনি যা করার চেষ্টা করছেন তা খুব দরকারী এবং আমি খুঁজে পেয়েছি যে আমি যে কোডটি লিখছি তা আমার প্রায়শই এটি করা দরকার। উদাহরণ ব্যবহারের ক্ষেত্রে:
বলুন আমাদের একটি ইন্টারফেস রয়েছে Fooএবং আমাদের একটি zorkingপ্যাকেজ রয়েছে যা একটি ZorkingFooManagerপ্যাকেজ-প্রাইভেটের উদাহরণ তৈরি করে এবং পরিচালনা করে ZorkingFoo implements Foo। (একটি খুব সাধারণ দৃশ্য।)
সুতরাং, ZorkingFooManagerএকটি ধারণ করা দরকার private Collection<ZorkingFoo> zorkingFoosতবে এটি একটি প্রকাশ করা প্রয়োজন public Collection<Foo> getAllFoos()।
বেশিরভাগ জাভা প্রোগ্রামাররা getAllFoos()নতুন বরাদ্দ হিসাবে প্রয়োগের আগে দুবার ভাবেন না ArrayList<Foo>, এটিকে সমস্ত উপাদান দিয়ে এটিকে জনবহুল করে zorkingFoosফিরে আসে returning আমি এই ভাবনাটি উপভোগ করতে পেরেছি যে সমগ্র গ্রহের লক্ষ লক্ষ মেশিনে চলমান জাভা কোড দ্বারা গ্রাহিত সমস্ত ঘড়ির চক্রের প্রায় 30% আরেলিস্টগুলির অনর্থক অনুলিপি তৈরি করা ছাড়া কিছুই করছে না যা তাদের সৃষ্টির পরে আবর্জনা-সংগৃহীত মাইক্রোসেকেন্ড রয়েছে।
এই সমস্যার সমাধান অবশ্যই সংগ্রহটি ডাউন কাস্টিং is এটি করার সর্বোত্তম উপায় এখানে:
static <T,U extends T> List<T> downCastList( List<U> list )
{
return castList( list );
}
যা আমাদের castList()ফাংশনে নিয়ে আসে :
static <T,E> List<T> castList( List<E> list )
{
@SuppressWarnings( "unchecked" )
List<T> result = (List<T>)list;
return result;
}
মধ্যবর্তী result পরিবর্তনশীল জাভা ভাষার একটি বিকৃতি কারণে প্রয়োজনীয়:
সুতরাং, যদিও @SuppressWarningsকোনও returnবিবৃতিতে কোশার ব্যবহার করা ঠিক নয় , এটি একটি অ্যাসাইনমেন্টে এটি ব্যবহার করা স্পষ্টতই ভাল, সুতরাং অতিরিক্ত "ফলাফল" পরিবর্তনশীল এই সমস্যাটি সমাধান করে। (এটি যেকোনওভাবে সংকলক বা জেআইটি দ্বারা অপ্টিমাইজ করা উচিত))