আপনি যা করার চেষ্টা করছেন তা খুব দরকারী এবং আমি খুঁজে পেয়েছি যে আমি যে কোডটি লিখছি তা আমার প্রায়শই এটি করা দরকার। উদাহরণ ব্যবহারের ক্ষেত্রে:
বলুন আমাদের একটি ইন্টারফেস রয়েছে 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
বিবৃতিতে কোশার ব্যবহার করা ঠিক নয় , এটি একটি অ্যাসাইনমেন্টে এটি ব্যবহার করা স্পষ্টতই ভাল, সুতরাং অতিরিক্ত "ফলাফল" পরিবর্তনশীল এই সমস্যাটি সমাধান করে। (এটি যেকোনওভাবে সংকলক বা জেআইটি দ্বারা অপ্টিমাইজ করা উচিত))