আপনি লাইনটি কোথায় আঁকতে চান এটি বিষয়। আপনি এমন একটি ভাষা ডিজাইন করতে পারেন যা অন্তর্নিহিত ডাউনকাস্টের বৈধতা সনাক্ত করবে:
public static void main(String args[]) {
// An implicit upcast
Fruit parent = new Apple();
// An implicit downcast to Apple
Apple child = parent;
}
এখন, একটি পদ্ধতি বের করুন:
public static void main(String args[]) {
// An implicit upcast
Fruit parent = new Apple();
eat(parent);
}
public static void eat(Fruit parent) {
// An implicit downcast to Apple
Apple child = parent;
}
আমরা এখনও ভাল। স্থির বিশ্লেষণ অনেক কঠিন তবে এখনও সম্ভব।
তবে সমস্যাটি খুব দ্বিতীয় দ্বিতীয়টি পপ আপ করে দেয় কেউ:
public static void causeTrouble() {
// An implicit upcast
Fruit trouble = new Orange();
eat(trouble);
}
এখন, আপনি কোথায় ত্রুটি বাড়াতে চান? এটি একটি দ্বিধা সৃষ্টি করে, কেউ বলতে পারেন যে সমস্যাটি রয়েছে Apple child = parent;
তবে এটি "তবে এটি আগে কাজ করেছিল" দ্বারা প্রত্যাখাত হতে পারে। অন্যদিকে, eat(trouble);
সমস্যাটি যুক্ত করার ফলে ", তবে পলিমারফিজমের পুরো বিন্দুটি হ'ল এটির অনুমতি দেওয়া।
এই ক্ষেত্রে, আপনি প্রোগ্রামারের কিছু কাজ করতে পারেন, তবে আপনি এটি পুরোপুরি করতে পারবেন না। হাল ছেড়ে দেওয়ার আগে আপনি আরও যতটা গ্রহণ করবেন, ভুল কী হয়েছে তা ব্যাখ্যা করা তত কঠিন। সুতরাং, তাড়াতাড়ি রিপোর্ট করার নীতি অনুসারে যত তাড়াতাড়ি সম্ভব থামানো ভাল।
বিটিডাব্লু, জাভাতে আপনার বর্ণিত ডাউনকাস্টটি আসলে একটি ডাউনকাস্ট নয়। এটি একটি সাধারণ castালাই, যা কমলাতে আপেলও কাস্ট করতে পারে। সুতরাং, প্রযুক্তিগতভাবে @ চি এর ধারণাটি ইতিমধ্যে এখানে রয়েছে, জাভাতে কোনও ডাউনকাস্ট নেই, কেবলমাত্র "এরিক্লাস্ট"। এটি একটি বিশেষায়িত ডাউনকাস্ট অপারেটর ডিজাইন করা বোধগম্য হবে যে সংকলনের ত্রুটিটি ছুঁড়ে ফেলবে যখন ফলাফলের ধরণটি যুক্তির ধরণ থেকে প্রবাহের ধরণটি খুঁজে পাওয়া যায় না। খুব ভাল কারণ ছাড়াই প্রোগ্রামারদের এটির ব্যবহার থেকে নিরুৎসাহিত করার জন্য "Everycast" ব্যবহার করা আরও বেশি কঠিন কাজ করা ভাল ধারণা হবে। সি ++ এর XXXXX_cast<type>(argument)
সিনট্যাক্স মাথায় আসে।