জাভাতে কাস্টিং যাদু নয়, আপনি এটি সংকলককে বলছেন যে টাইপ এ এর একটি অবজেক্ট আসলে আরও নির্দিষ্ট ধরণের বি এর, এবং এভাবে বি তে সমস্ত পদ্ধতিতে অ্যাক্সেস অর্জন করে যা আপনি অন্যথায় না করতেন। কাস্টিং সম্পাদন করার সময় আপনি কোনও ধরণের যাদু বা রূপান্তর করছেন না, আপনি মূলত সংকলককে বলছেন "বিশ্বাস করুন, আমি জানি আমি কি করছি এবং আমি আপনাকে গ্যারান্টি দিতে পারি যে এই লাইনে এই অবজেক্টটি আসলে একটি <castোকান কাস্ট" এখানে টাইপ করুন। " উদাহরণ স্বরূপ:
Object o = "str";
String str = (String)o;
উপরেরটি ঠিক আছে, যাদু নয় এবং সব ঠিক আছে। ও তে সংরক্ষিত থাকা বস্তুটি আসলে একটি স্ট্রিং, এবং সেইজন্য আমরা কোনও সমস্যা ছাড়াই একটি স্ট্রিংয়ে কাস্ট করতে পারি।
এটি ভুল হতে পারে দুটি উপায় আছে। প্রথমত, যদি আপনি সম্পূর্ণ ভিন্ন উত্তরাধিকারের শ্রেণিবিন্যাসে দুটি ধরণের মধ্যে কাস্ট করছেন তবে সংকলকটি জানতে পারবে আপনি বোকা হয়ে যাচ্ছেন এবং আপনাকে থামিয়েছেন:
String o = "str";
Integer str = (Integer)o;
দ্বিতীয়ত, যদি তারা একই শ্রেণিবিন্যাসে থাকে তবে এখনও অবৈধ কাস্ট হয় তবে ClassCastException
রানটাইমের সময় একটি নিক্ষিপ্ত হবে:
Number o = new Integer(5);
Double n = (Double)o;
এর মূলত অর্থ এই যে আপনি সংকলকের বিশ্বাস লঙ্ঘন করেছেন। আপনি এটিকে বলেছেন যে আপনি গ্যারান্টি দিতে পারবেন যে কোনও জিনিসটি নির্দিষ্ট ধরণের।
আপনার castালাই কেন দরকার? ভাল, আপনার সাথে শুরু করার জন্য কেবলমাত্র আরও সাধারণ ধরণের থেকে আরও নির্দিষ্ট ধরণের দিকে যেতে হবে। উদাহরণস্বরূপ, Integer
উত্তরাধিকার সূত্রে প্রাপ্ত Number
, সুতরাং আপনি যদি কোনও Integer
হিসাবে এটি সংরক্ষণ করতে চান Number
তবে এটি ঠিক আছে (যেহেতু সমস্ত সংখ্যার সংখ্যা হয়)) তবে, আপনি যদি অন্য পথে যেতে চান তবে আপনার একটি castালাই প্রয়োজন - সমস্ত সংখ্যাই পূর্ণসংখ্যার নয় (পাশাপাশি পূর্ণসংখ্যা হিসাবে আমরা আছে Double
, Float
, Byte
, Long
, ইত্যাদি) নেই এবং এমনকি যদি আপনার প্রকল্প বা JDK মাত্র এক উপশ্রেণী, কেউ সহজে আরেকটি তৈরি এবং যে বিতরণ পারেনি, সেহেতু আপনি কোন গ্যারান্টি করেছি এমনকি যদি আপনি মনে হয় এটা একটি একক, সুস্পষ্ট পছন্দ !
কাস্টিংয়ের জন্য ব্যবহার সম্পর্কে, আপনি এখনও কিছু লাইব্রেরিতে এটির প্রয়োজনীয়তা দেখতে পান। জাভা -5-এর পূর্ববর্তী সংগ্রহ এবং অন্যান্য বিভিন্ন শ্রেণিতে এটি প্রচুর পরিমাণে ব্যবহৃত হয়েছিল, যেহেতু সমস্ত সংগ্রহগুলি অবজেক্ট যুক্ত করার এবং তারপরে ফলাফলটি কাস্টিংয়ে কাজ করেছিল যে আপনি সংগ্রহটি ফিরে পেয়েছিলেন। তবে জেনেরিক্সের আবির্ভাবের সাথে কাস্টিংয়ের জন্য বেশিরভাগ ব্যবহার চলে গেছে - এটি জেনেরিকগুলি দ্বারা প্রতিস্থাপন করা হয়েছে যা ক্লাসকাস্টেক্সেপশনগুলির সম্ভাবনা ছাড়াই অনেক বেশি নিরাপদ বিকল্প সরবরাহ করে (বাস্তবে আপনি জেনেরিকগুলি পরিষ্কারভাবে ব্যবহার করেন এবং এটি কোনও সতর্কতা সহ সংকলন করে, আপনার গ্যারান্টি আছে যে আপনি কখনই ক্লাসকাস্ট এক্সেকশন পাবেন না))