class MyClass {
private String str;
public MyClass(String str){
this.str = str;
}
public int compare(Object o) {
return str.compareTo(((MyClass)o).str); //line No.8
}
}
class Client {
public static void main(String[] args) {
MyClass m = new MyClass("abc");
MyClass n = new MyClass("bcd");
System.out.println(m.compare(n));
}
}
क्यों इस कोड स्निपेट में लाइन नंबर 8 में डाली (MyClass)o
आवश्यक है, तथ्य यह है क्लाइंट का आह्वान है कि तर्क जो MyClass वर्ग के उदाहरण हैं के साथ एक compare
विधि के बावजूद?इस मामले में कलाकार क्यों जरूरी है?
मैं नीचे की तरह बनाने के लिए MyClass कक्षा में compare
विधि को संशोधित जब:
public int compare(Object o) {
System.out.println(o.getClass());
System.out.println(((MyClass)o).getClass());
return str.compareTo(((MyClass)o).str);
}
फिर, क्लाइंट निम्न परिणाम का उत्पादन करेगा:
class MyClass
class MyClass
इस प्रकार मुझे समझ नहीं आता क्यों उपरोक्त कास्ट आवश्यक है और मैं ऐसा क्यों नहीं कर सकता (बिना माई क्लास के कलाकार):
public int compare(Object o) {
return str.compareTo(o.str);
}
क्योंकि जब मैं ऐसा, मैं संकलन समय त्रुटि मिलती है:
str cannot be resolved or is not a field