উত্তর:
আপনি null
কোনও ব্যতিক্রম না পেয়ে যেকোন রেফারেন্স প্রকারে কাস্ট করতে পারেন ।
println
পদ্ধতি নাল পয়েন্টার নিক্ষেপ না কারণ এটি প্রথম চেক বস্তুর নাল কি না কিনা। যদি নাল হয় তবে এটি স্ট্রিংটি প্রিন্ট করে "null"
। অন্যথায় এটি toString
object বস্তুর পদ্ধতিটি কল করবে ।
আরও বিশদ যুক্ত করা হচ্ছে:String.valueOf(object)
ইনপুট অবজেক্টে অভ্যন্তরীণভাবে মুদ্রণ পদ্ধতিগুলি কল পদ্ধতিতে প্রিন্ট করুন। এবং valueOf
পদ্ধতিতে, এই চেকটি নাল পয়েন্টার ব্যতিক্রম এড়াতে সহায়তা করে:
return (obj == null) ? "null" : obj.toString();
আপনার বাকী বিভ্রান্তির জন্য, কোনও নাল অবজেক্টে যে কোনও পদ্ধতি কল করা কোনও বিশেষ ক্ষেত্রে না হলে নাল পয়েন্টার ব্যতিক্রম নিক্ষেপ করা উচিত।
আপনি null
যে কোনও রেফারেন্স প্রকারে কাস্ট করতে পারেন । আপনি এমন পদ্ধতিগুলিতে কল করতে পারেন যা null
একটি আর্গুমেন্ট হিসাবে পরিচালনা System.out.println(Object)
করে, উদাহরণস্বরূপ , তবে আপনি কোনও null
মান উল্লেখ করতে এবং এটিতে কোনও পদ্ধতিতে কল করতে পারবেন না ।
বিটিডব্লিউ একটি জটিল পরিস্থিতি রয়েছে যেখানে এটি প্রদর্শিত হয় আপনি null
মানগুলিতে স্থির পদ্ধতিগুলি কল করতে পারেন ।
Thread t = null;
t.yield(); // Calls static method Thread.yield() so this runs fine.
t.yield() -> Thread.yeld()
যেকোনভাবে এটি "অনুকূলিত করে" ? কীভাবে final int i = 1; while (i == 1)
অপ্টিমাইজ করা হয় তার অনুরূপwhile(true)
এটি নকশা দ্বারা। আপনি null
যে কোনও রেফারেন্স প্রকারে কাস্ট করতে পারেন । অন্যথায় আপনি এটিকে রেফারেন্স ভেরিয়েবলগুলিতে নির্ধারণ করতে সক্ষম হবেন না।
নিম্নলিখিত পদ্ধতিটি নির্মাণের জন্য নাল মানগুলি ingালাই করা প্রয়োজন যেখানে কোনও পদ্ধতি অতিরিক্ত লোড করা হয় এবং যদি নালগুলি এই ওভারলোডেড পদ্ধতিগুলিতে প্রেরণ করা হয় তবে সংকলকটি কীভাবে অস্পষ্টতা পরিষ্কার করতে জানে না তাই আমাদের এই ক্ষেত্রে নাল টাইপ করতে হবে:
class A {
public void foo(Long l) {
// do something with l
}
public void foo(String s) {
// do something with s
}
}
new A().foo((String)null);
new A().foo((Long)null);
অন্যথায় আপনি আপনার প্রয়োজনীয় পদ্ধতিটি কল করতে পারেন নি।
String bar = null;
ingালাই অন্তর্নিহিত, যেমন null
মানটিকে কাস্ট করে String
। এখনও পর্যন্ত আমি কেবল একটি পরীক্ষায় স্পষ্টভাবে নাল নিক্ষেপ করতে হয়েছিল যেখানে কোনও পদ্ধতি ওভারলোড হয়েছিল এবং নাল ইনপুট দিয়ে আমি এর আচরণটি পরীক্ষা করতে চেয়েছিলাম। তবুও, জেনে রাখা ভাল, আমি আপনার উত্তর পাওয়ার আগে আমি একই রকম উত্তর লিখতে চলেছিলাম।
l instanceof Long
এবং এই ক্ষেত্রে s instanceof String
ফিরে আসবে false
।
এখানে অনেক উত্তর ইতিমধ্যে উল্লেখ আছে
আপনি যে কোনও রেফারেন্স ধরণের নਾਲ কাস্ট করতে পারেন
এবং
যদি আর্গুমেন্টটি নাল হয়, তবে "নাল" সমান একটি স্ট্রিং
আমি কোথায় আছি তা নির্দিষ্ট করে জাভা স্পেসিফিকেশনটি সন্ধান করেছি:
নাল রেফারেন্স সর্বদা নির্ধারিত বা কোনও রেফারেন্স টাইপের (.25.2, §5.3, §5.5) এ কাস্ট করা যেতে পারে।
যদি রেফারেন্সটি নাল হয় তবে এটি "নাল" স্ট্রিংয়ে রূপান্তরিত হয় (চারটি ASCII অক্ষর n, u, l, l)।
অন্যরা যেমন লিখেছেন, আপনি সবকিছুতে নালাকে ফেলে দিতে পারেন। সাধারণত, আপনার প্রয়োজন হবে না, আপনি লিখতে পারেন:
String nullString = null;
সেখানে theালাই না রেখে।
তবে এমন অনুষ্ঠানগুলি রয়েছে যেখানে এই জাতীয় বর্ণগুলি বোঝায়:
ক) আপনি যদি নিশ্চিত করতে চান যে একটি নির্দিষ্ট পদ্ধতি বলা হয়েছে, যেমন:
void foo(String bar) { ... }
void foo(Object bar) { ... }
যদি আপনি টাইপ করেন তবে এটি একটি পার্থক্য তৈরি করবে
foo((String) null) vs. foo(null)
খ) যদি আপনি কোড তৈরি করতে আপনার আইডিই ব্যবহার করতে চান; উদাহরণস্বরূপ আমি সাধারণত ইউনিট পরীক্ষা লিখছি:
@Test(expected=NullPointerException.class)
public testCtorWithNullWhatever() {
new MyClassUnderTest((Whatever) null);
}
আমি টিডিডি করছি; এর অর্থ হ'ল "মাইক্লাসউন্ডারস্টেস্ট" বর্গটি সম্ভবত উপস্থিত নেই। এই কোডটি লিখে, আমি তারপরে প্রথমে নতুন ক্লাসটি তৈরি করতে আমার আইডিই ব্যবহার করতে পারি; এবং তারপরে একটি কনস্ট্রাক্টর উত্পাদন করতে "বাক্সের বাইরে" যাই হোক না কেন "যুক্তি" স্বীকার করুন - আইডিই আমার পরীক্ষা থেকে বুঝতে পারে যে কনস্ট্রাক্টর যা-ই হোক না কেন টাইপের ঠিক একটি যুক্তি গ্রহণ করা উচিত।
অন্যথায় অস্পষ্ট হতে পারে এমন কোনও পদ্ধতি ব্যবহার করার সময় এটি খুব সহজ। উদাহরণস্বরূপ: জেডিএলগের নিম্নলিখিত স্বাক্ষর সহ নির্মাতা রয়েছে:
JDialog(Frame, String, boolean, GraphicsConfiguration)
JDialog(Dialog, String, boolean, GraphicsConfiguration)
আমার এই কনস্ট্রাক্টরটি ব্যবহার করা দরকার, কারণ আমি গ্রাফিকস কনফিগারেশনটি সেট করতে চাই, তবে এই ডায়ালগটির জন্য আমার কোনও পিতামাতা নেই, তাই প্রথম যুক্তিটি বাতিল হওয়া উচিত। ব্যবহার
JDialog(null, String, boolean, Graphicsconfiguration)
অস্পষ্ট, তাই এই ক্ষেত্রে আমি সমর্থিত ধরণের একটিতে নাল কাস্ট করে কলটি সংকীর্ণ করতে পারি:
JDialog((Frame) null, String, boolean, GraphicsConfiguration)
এই পরিস্থিতিতে এই ভাষার বৈশিষ্ট্যটি সুবিধাজনক।
public String getName() {
return (String) memberHashMap.get("Name");
}
যদি সদস্য হ্যাশম্যাপ.জেট ("নাম") বাতিল করে দেয় তবে আপনি চাইবেন উপরের পদ্ধতিটি কোনও ব্যতিক্রম না ছুঁড়েই নালার দিকে ফিরে আসে। ক্লাসটি যাই হোক না কেন, নাল শূন্য হয়।