ক্লাস কাস্টের পরিবর্তে নাল পয়েন্টার কেন?


26

জাভাতে:

int count = (Integer) null;

একটি java.lang. নালপয়েন্টারএক্সসেপশন ছুড়ে দেয়।

প্রোগ্রামার বোঝার সুবিধার্থে এটি ক্লাস কাস্ট ব্যতিক্রম কেন ফেলে না?

অন্য কোন ব্যতিক্রমের তুলনায় কেন এই ব্যতিক্রমটি বেছে নেওয়া হয়েছিল?

উত্তর:


46

আপনার কোডটি কার্যকর করার সময়, জাভা রানটাইম নিম্নলিখিতগুলি করে:

  1. শ্রেণীর পূর্ণসংখ্যার অবজেক্টে নাল কাস্ট করুন।
  2. পদ্ধতিটি intValue () কে কল করে পূর্ণসংখ্যার অবজেক্টটিকে একটি আন-বাক্সে আনবক্স করার চেষ্টা করুন
  3. নাল অবজেক্টে কোনও পদ্ধতিতে কল করা একটি নালপয়েন্টারএক্সসেপশন ছুড়ে দেয়।

অন্য কথায়, নাল কোনও সমস্যা ছাড়াই পূর্ণসংখ্যায় কাস্ট করা যেতে পারে তবে নাল পূর্ণসংখ্যার অবজেক্টটি টাইপ ইন্টের মানতে রূপান্তর করা যায় না।

সম্পাদনা

স্ট্যাক ওভারফ্লোতে কিছুক্ষণ আগে আমার একটি সম্পর্কিত প্রশ্ন ছিল, এখানে দেখুন


1

জাভা সাফল্যের সাথে কোনও পূর্ণসংখ্যার রেফারেন্সে বাতিল করে দেয় যা কোনও বস্তুর উল্লেখ করে না।

এটি ঠিক আছে কারণ নিরপেক্ষ হওয়া কোনও রেফারেন্সের জন্য একটি বৈধ রাষ্ট্র।

এটি অস্তিত্বহীন অবজেক্টের এমন কোনও পদ্ধতির কলিং যা সম্পাদন করা যায় না।

Castালাই সম্পাদন করা (Integer)nullএকটি পূর্ণসংখ্যার ভেরিয়েবল ঘোষণা করা এবং তারপরে এটি কোনও নতুন (বা ইতিমধ্যে বিদ্যমান) পূর্ণসংখ্যার অবজেক্ট ইনস্ট্যান্স নির্ধারণে ব্যর্থ হওয়ার সমান।


-1

একটি Integerইন ইনবক্স করতে intযেমন ইন int i = new Integer(15);, iআসলে সমান new Integer(15).intValue() i = (Integer) o; যেখানে Object o = 15হিসাবে একই o = Integer.valueOf(15);কিন্তু i = null; একটি ছুড়ে NullPointerExceptionকারণ একটি iসমান null.intValue()যা সমান NullPointerException


2
প্রায় দুই বছর আগে যে উত্তর গৃহীত হয়েছিল তা প্রায় একই ব্যাখ্যা সরবরাহ করে তবে এটি আরও স্পষ্ট। এই উত্তরটি জাভা 5+ এর জন্যও সঠিক নয়: এটি বক্সিংের valueOf()জন্য নতুন উদাহরণ তৈরি করার পরিবর্তে কারখানার পদ্ধতিগুলি ব্যবহার করে ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.