संदर्भ प्रकार रूपांतरण - 1

"और अब, डिएगो से एक छोटा सबक। संक्षिप्त और सटीक। संदर्भ प्रकार के रूपांतरणों के बारे में।"

"ऑब्जेक्ट चर के साथ शुरू करते हैं। आप इस तरह के एक चर ( विस्तार रूपांतरण ) के लिए कोई संदर्भ प्रकार निर्दिष्ट कर सकते हैं। हालांकि, दूसरी दिशा में असाइनमेंट करने के लिए ( संकीर्ण रूपांतरण ), आपको स्पष्ट रूप से एक कास्ट ऑपरेशन इंगित करना होगा:"

कोड विवरण
String s = "mom";
Object o = s; // o stores a String
एक विशिष्ट चौड़ा संदर्भ रूपांतरण
Object o = "mom"; // o stores a String
String s2 = (String) o;
एक विशिष्ट संकुचन संदर्भ रूपांतरण
Integer i = 123; // o stores an Integer
Object o = i;
व्यापक रूपांतरण।
Object o = 123; // o stores an Integer
String s2 = (String) o;
रनटाइम त्रुटि!
आप एक स्ट्रिंग संदर्भ के लिए एक इंटीजर संदर्भ नहीं डाल सकते हैं।
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
रनटाइम त्रुटि!
आप किसी फ़्लोट संदर्भ में पूर्णांक संदर्भ नहीं डाल सकते हैं।
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
उसी प्रकार में रूपांतरण। एक संकुचित संदर्भ रूपांतरण।

" एक चौड़ा या संकुचित संदर्भ रूपांतरण किसी भी तरह से वस्तु को नहीं बदलता है। संकुचन (या चौड़ा) भाग विशेष रूप से इस तथ्य को संदर्भित करता है कि असाइनमेंट ऑपरेशन में चर और उसके नए मूल्य की टाइप-चेकिंग शामिल है (शामिल नहीं है)। "

"यह दुर्लभ उदाहरण है जहां सब कुछ स्पष्ट है।"

" इन उदाहरणों में त्रुटियों से बचने के लिए ,  हमारे पास यह पता लगाने का एक तरीका है कि ऑब्जेक्ट चर द्वारा किस प्रकार का संदर्भ दिया गया है: "

कोड
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stores a Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)
{
    Float f2 = (Float) o;            // This if block will be executed
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

"जब तक आप वस्तु के प्रकार के बारे में 100% सुनिश्चित नहीं हो जाते, तब तक आपको प्रत्येक व्यापक रूपांतरण से पहले यह जांच करनी चाहिए।"

"समझ गया।"