জাভা সর্বদা উপলব্ধ যে কোনও পদ্ধতির সুনির্দিষ্ট প্রযোজ্য সংস্করণটি ব্যবহার করার চেষ্টা করবে ( জেএলএস §15.12.2 দেখুন )।
Object, char[]এবং Integerসমস্ত nullএকটি বৈধ মান হিসাবে নিতে পারে। অতএব সমস্ত 3 সংস্করণ প্রযোজ্য, তাই জাভা সবচেয়ে সুনির্দিষ্ট একটি সন্ধান করতে হবে।
থেকে Object অতি-ধরণের char[], তাই অ্যারে সংস্করণটি সংস্করণটির চেয়ে বেশি নির্দিষ্ট Object। সুতরাং শুধুমাত্র যদি এই দুটি পদ্ধতি বিদ্যমান থাকে তবে char[]সংস্করণটি চয়ন করা হবে।
যখন char[]এবং উভয়Integer সংস্করণ সংস্করণ উপলব্ধ থাকে, তখন উভয়ই তার চেয়ে বেশি নির্দিষ্ট হয় Objectতবে কোনওটি অন্যটির চেয়ে বেশি নির্দিষ্ট নয়, তাই জাভা কোনটি কল করতে পারে তা সিদ্ধান্ত নিতে পারে না। এই ক্ষেত্রে আপনাকে যথাযথ প্রকারের পক্ষে যুক্তিটি কাস্ট করে কোনটিকে কল করতে চান তা স্পষ্টভাবে উল্লেখ করতে হবে।
নোট করুন যে অনুশীলনে এই সমস্যাটি ঘটে যা কেউ ভাবেন তার চেয়ে কদাচিৎ ঘটে। এর কারণ হ'ল এটি তখনই ঘটে যখন আপনি স্পষ্টভাবে কোনও পদ্ধতিটিকে কল nullনা করে বরং একটি নির্দিষ্ট-নির্দিষ্ট ধরণের ভেরিয়েবলের সাথে (যেমন:Object ) এর ।
বিপরীতে, নিম্নলিখিত প্রার্থনা পুরোপুরি দ্ব্যর্থহীন হবে:
char[] x = null;
doSomething(x);
যদিও আপনি এখনও মানটি পাস করছেন null, জাভা ঠিক কোন পদ্ধতিটি কল করতে হবে তা জানেন, কারণ এটি ভেরিয়েবলের ধরণটিকে বিবেচনা করবে।
Integerকরতেint।