क्या कोई मुझे इस बारे में बता सकता है कि मुझे इस स्निपेट में ClassCastException
क्यों नहीं मिला है? मुझे सख्ती से दिलचस्पी है कि यह क्यों काम नहीं कर रहा है क्योंकि मैं उम्मीद कर रहा था। मुझे इस बात पर परवाह नहीं है कि यह खराब डिजाइन है या नहीं।जावा में आलसी वर्ग कास्ट?
public class Test {
static class Parent {
@Override
public String toString() { return "parent"; }
}
static class ChildA extends Parent {
@Override
public String toString() { return "child A"; }
}
static class ChildB extends Parent {
@Override
public String toString() { return "child B"; }
}
public <C extends Parent> C get() {
return (C) new ChildA();
}
public static void main(String[] args) {
Test test = new Test();
// should throw ClassCastException...
System.out.println(test.<ChildB>get());
// throws ClassCastException...
System.out.println(test.<ChildB>get().toString());
}
}
यह जावा संस्करण, संकलन है, और उत्पादन चलाएँ:
$ java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
$ javac -Xlint:unchecked Test.java
Test.java:24: warning: [unchecked] unchecked cast
return (C) new ChildA();
^
required: C
found: ChildA
where C is a type-variable:
C extends Parent declared in method <C>get()
1 warning
$ java Test
child A
Exception in thread "main" java.lang.ClassCastException: Test$ChildA cannot be cast to Test$ChildB
at Test.main(Test.java:30)
के कलाकारों की जरूरत नहीं है, लेकिन मैं यह पहले सवाल की याद दिला रहा हूँ/उत्तर, शायद यह मदद करेगा http://stackoverflow.com/q/6538058/630384 – DHall
एक कारण है कि अनचेक कास्ट चेतावनी क्यों है। इसका शाब्दिक अर्थ यह है कि, कास्ट रनटाइम चेक नहीं कर सकता/नहीं कर सकता है। – millimoose