রেফারেন্স প্রকার রূপান্তর - 1

"এবং এখন, দিয়েগো থেকে একটি সংক্ষিপ্ত পাঠ। সংক্ষিপ্ত এবং বিন্দুতে। রেফারেন্স টাইপ রূপান্তর সম্পর্কে।"

"আসুন অবজেক্ট ভেরিয়েবল দিয়ে শুরু করা যাক। আপনি এই ধরনের ভেরিয়েবলের জন্য যেকোনও রেফারেন্স টাইপ বরাদ্দ করতে পারেন ( রূপান্তর প্রশস্ত করা )। তবে, অ্যাসাইনমেন্টটি অন্য দিকে করতে ( সংকীর্ণ রূপান্তর ), আপনাকে অবশ্যই একটি কাস্ট অপারেশনকে স্পষ্টভাবে নির্দেশ করতে হবে:"

কোড বর্ণনা
String s = "mom";
Object o = s; // o stores a String
একটি সাধারণ প্রসারিত রেফারেন্স রূপান্তর
Object o = "mom"; // o stores a String
String s2 = (String) o;
একটি সাধারণ সংকীর্ণ রেফারেন্স রূপান্তর
Integer i = 123; // o stores an Integer
Object o = i;
প্রসারিত রূপান্তর.
Object o = 123; // o stores an Integer
String s2 = (String) o;
রানটাইম ত্রুটি!
আপনি একটি স্ট্রিং রেফারেন্সে একটি পূর্ণসংখ্যা রেফারেন্স নিক্ষেপ করতে পারবেন না।
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
রানটাইম ত্রুটি!
আপনি একটি ফ্লোট রেফারেন্সে একটি পূর্ণসংখ্যা রেফারেন্স কাস্ট করতে পারবেন না।
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
একই ধরনের রূপান্তর. একটি সংকীর্ণ রেফারেন্স রূপান্তর.

" একটি প্রসারিত বা সংকীর্ণ রেফারেন্স রূপান্তর বস্তুটিকে কোনোভাবেই পরিবর্তন করে না। সংকীর্ণ (বা প্রশস্তকরণ) অংশটি বিশেষভাবে বোঝায় যে অ্যাসাইনমেন্ট অপারেশনে ভেরিয়েবলের টাইপ-চেকিং এবং এর নতুন মান অন্তর্ভুক্ত (অন্তর্ভুক্ত নয়)। "

"এটি বিরল উদাহরণ যেখানে সবকিছু পরিষ্কার।"

" এই উদাহরণগুলিতে ত্রুটিগুলি এড়াতে ,  আমাদের কাছে অবজেক্ট ভেরিয়েবল দ্বারা কোন প্রকার উল্লেখ করা হয়েছে তা খুঁজে বের করার একটি উপায় রয়েছে: "

কোড
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stores a Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)
{
    Float f2 = (Float) o;            // This if block will be executed
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

"প্রতিটি প্রসারিত রূপান্তরের আগে আপনার এই চেকটি করা উচিত যদি না আপনি বস্তুর প্রকার সম্পর্কে 100% নিশ্চিত হন।"

"বুঝেছি."