ডাউন কাস্টিং কখনও কখনও প্রয়োজনীয় এবং উপযুক্ত হয়। বিশেষত, এটির ক্ষেত্রে বেশিরভাগ ক্ষেত্রে উপযুক্ত হয় যেখানে কারও কিছু ক্ষমতা থাকতে পারে বা নাও থাকতে পারে এবং যখন কোনও দক্ষতা ছাড়াই কোনও ডিফল্ট ফ্যাশনে অবজেক্টগুলি পরিচালনা করতে থাকে তখন সেই ক্ষমতাটি ব্যবহার করার ইচ্ছা থাকে wishes একটি সাধারণ উদাহরণ হিসাবে ধরা যাক, String
এটিকে জিজ্ঞাসা করা হয়েছে যে এটি কিছু অন্যরকম বস্তুর সমান কিনা equal একের String
সাথে অন্যকে সমান করার জন্য String
, এটি অবশ্যই অন্য স্ট্রিংয়ের দৈর্ঘ্য এবং ব্যাকিং অক্ষরের অ্যারে পরীক্ষা করতে হবে। যদি String
এটির জিজ্ঞাসা করা হয় এটি একটি সমান কিনা Dog
, তবে এটি দৈর্ঘ্যের অ্যাক্সেস করতে পারে না Dog
, তবে এটি করার দরকার নেই; পরিবর্তে, যেটির String
সাথে নিজেকে তুলনা করার কথা বলে তা যদি একটি না হয়String
, তুলনাটি একটি ডিফল্ট আচরণ ব্যবহার করা উচিত (অন্য বিষয় সমান নয় বলে প্রতিবেদন করা)।
ডাউন কাস্টিংকে সবচেয়ে সন্দেহজনক হিসাবে গণ্য করা উচিত যখন কাস্ট করা অবজেক্টটি সঠিক ধরণের হতে "পরিচিত" হয় of সাধারণভাবে, যদি কোনও বস্তু a হিসাবে পরিচিত হয় Cat
তবে তার উল্লেখের জন্য ব্যক্তির পরিবর্তকের Cat
পরিবর্তে টাইপের পরিবর্তক ব্যবহার করা উচিত Animal
। কিছু সময় আছে যখন এটি সর্বদা কার্যকর হয় না। উদাহরণস্বরূপ, Zoo
সংগ্রহটি জোড় / বিজোড় অ্যারে স্লটগুলিতে জোড়া বস্তু ধারণ করতে পারে, এই প্রত্যাশা সহ যে প্রতিটি জোড়ের বস্তুগুলি একে অপরের উপর কাজ করতে সক্ষম হবে, এমনকি যদি তারা অন্য জোড়ের বস্তুগুলিতে কাজ করতে না পারে। এই জাতীয় ক্ষেত্রে, প্রতিটি জোড়ের অবজেক্টগুলিকে এখনও কোনও নির্দিষ্ট-নির্দিষ্ট প্যারামিটার ধরণের গ্রহণ করতে হবে যেমন তারা সিন্ট্যাক্টিকভাবে , অন্য কোনও জুড়ি থেকে অবজেক্টগুলি পাস করতে পারে। সুতরাং, এমনকি যদি Cat
এরplayWith(Animal other)
পদ্ধতিটি কেবল তখনই কাজ করবে যখন এটি other
ছিল Cat
, Zoo
এটির কোনও উপাদানটি পাস করার প্রয়োজন হবে Animal[]
, সুতরাং এর পরামিতিটির ধরণের Animal
পরিবর্তে হওয়া উচিত Cat
।
যেসব ক্ষেত্রে ডাউন কাস্টিং বৈধভাবে অপরিহার্য, সেখানে কাউকে বিনা বাছাই করা উচিত। মূল প্রশ্নটি নির্ধারণ করা হচ্ছে যে কখন কোনও সংজ্ঞাগতভাবে ডাউন কাস্টিং এড়াতে পারে এবং সংবেদনশীলভাবে সম্ভব হলে এড়ানো উচিত।