সমস্যাটি হল যে String.valueOf
পদ্ধতিটি ওভারলোড হয়েছে :
জাভা স্পেসিফিকেশন ভাষা নির্দেশ দেয় যে এই ধরণের ক্ষেত্রে সর্বাধিক নির্দিষ্ট ওভারলোডটি বেছে নেওয়া হয়:
যদি একাধিক সদস্য পদ্ধতি উভয়ই অ্যাক্সেসযোগ্য এবং কোনও পদ্ধতিতে প্রার্থনার জন্য প্রযোজ্য হয় তবে রান-টাইম পদ্ধতি প্রেরণের জন্য বর্ণনাকারী সরবরাহ করার জন্য একজনকে বেছে নেওয়া প্রয়োজন। জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজটি সুনির্দিষ্ট পদ্ধতিটি বেছে নেওয়ার নিয়মটি ব্যবহার করে ।
এ char[]
-হ'ল Object
, তবে সব Object
-ই নয় char[]
। অতএব, char[]
হয় আরো নির্দিষ্ট চেয়ে Object
, এবং জাভা ভাষা দ্বারা নির্দিষ্ট করা থাকে, String.valueOf(char[])
জমিদার এই ক্ষেত্রে নির্বাচিত করা হয়।
String.valueOf(char[])
অ্যারেটি অ-হিসাবে প্রত্যাশা করে null
এবং যেহেতু null
এই ক্ষেত্রে দেওয়া হয়, এটি তখন ছুঁড়ে দেয় NullPointerException
।
সহজ "ফিক্স" হ'ল null
স্পষ্টভাবে Object
নিম্নলিখিতভাবে কাস্ট করা :
System.out.println(String.valueOf((Object) null));
// prints "null"
সম্পর্কিত প্রশ্নগুলি
গল্পের নৈতিক
বেশ কয়েকটি গুরুত্বপূর্ণ রয়েছে:
- কার্যকর জাভা 2 য় সংস্করণ, আইটেম 41: ন্যায়বিচারের সাথে ওভারলোডিং ব্যবহার করুন
- কেবলমাত্র আপনি ওভারলোড করতে পারেন, এর অর্থ এই নয় যে আপনার প্রতিবার করা উচিত
- এগুলি বিভ্রান্তির কারণ হতে পারে (বিশেষত যদি পদ্ধতিগুলি বিভিন্নভাবে বিভিন্ন কাজ করে)
- ভাল আইডিই ব্যবহার করে আপনি সংকলনের সময় কোন ওভারলোড নির্বাচন করা হয়েছে তা যাচাই করতে পারেন
- অন্ধকার সঙ্গে, আপনি উপরে অভিব্যক্তি উপর মাউস-বাতাসে ভেসে থাকতে ও দেখতে যে প্রকৃতপক্ষে ,
valueOf(char[])
জমিদার নির্বাচিত করা হয়!
- কখনও কখনও আপনি স্পষ্টভাবে কাস্ট করতে চান
null
(অনুসরণ করার উদাহরণগুলি)
আরো দেখুন
ভোটদানের সময় null
কমপক্ষে দুটি পরিস্থিতি রয়েছে যেখানে null
একটি নির্দিষ্ট রেফারেন্স প্রকারে স্পষ্টভাবে কাস্টিং প্রয়োজনীয়:
- অতিরিক্ত লোডিং নির্বাচন করতে (উপরের উদাহরণ হিসাবে দেওয়া হয়েছে)
- দিতে
null
একটি vararg পরামিতি একটি একক আর্গুমেন্ট হিসাবে
পরবর্তীগুলির একটি সাধারণ উদাহরণ নিম্নরূপ:
static void vararg(Object... os) {
System.out.println(os.length);
}
তারপরে, আমাদের নিম্নলিখিতগুলি থাকতে পারে:
vararg(null, null, null); // prints "3"
vararg(null, null); // prints "2"
vararg(null); // throws NullPointerException!
vararg((Object) null); // prints "1"
আরো দেখুন
সম্পর্কিত প্রশ্নগুলি
null
এই ক্ষেত্রে) তে একটি যুক্তি কল করা যায় , তখন নিশ্চিত হয়ে নিন যে উভয় ওভারলোডগুলি সেই মানটির ক্ষেত্রে একই আচরণ করে!