किसी भी ClassCastException, जब आपके टी कुछ आधार है को छोड़कर वहाँ नहीं होगा:
public class GenericsTest
{
public static void main(String[] args)
{
System.out.println(cast(Integer.valueOf(0)));
System.out.println(GenericsTest.<Long> cast(Integer.valueOf(0)));
System.out.println(GenericsTest.<Long> cast("Hallo"));
System.out.println(castBaseNumber(Integer.valueOf(0)));
System.out.println(GenericsTest.<Long> castBaseNumber(Integer.valueOf(0)));
System.out.println(GenericsTest.<Long> castBaseNumber("Hallo"));
}
private static <T extends Number> T castBaseNumber(Object o)
{
T t = (T)o;
return t;
}
private static <T> T cast(Object o)
{
T t = (T)o;
return t;
}
}
उपरोक्त उदाहरण में, वहाँ हो जाएगा पहली 5 कॉल में CastCastException कास्ट और CastBaseNumber को कॉल करने के लिए नहीं। केवल 6 वें कॉल क्लासकास्ट अपवाद को फेंकता है, क्योंकि संकलक प्रभावी रूप से कास्ट() को वापस करने के लिए (ऑब्जेक्ट) ओ और कास्टबेस नम्बर() को वापस करने के लिए अनुवाद करता है (संख्या) ओ; Wenn आप
String s = GenericsTest.<Long> cast("Hallo");
बारे में आप एक ClassCastException मिलेगा, लेकिन नहीं कच्चे विधि whithin, लेकिन रों को काम पर।
इसलिए मुझे लगता है कि, आपका "टी" सिर्फ "टी" नहीं है, लेकिन "टी कुछ बढ़ाता है"। तो अगर आप की जांच कर सकता:
Object o = decoder.readObject();
if (o instanceof Something)
restoredItem = (T) o;
else
// Error handling
लेकिन यह अभी भी, बाद में एक त्रुटि के लिए नेतृत्व जब आप अपने वर्ग का उपयोग करेगा।
public Reader<T extends Number>{...}
Long l = new Reader<Long>("file.xml").getValue(); // there might be the ClassCastException
इस मामले के लिए केवल टॉम की सलाह ही मदद कर सकती है।
स्रोत
2008-10-09 12:51:44
Retagged पर isAssignableFrom विधि का उपयोग करने और अधिक सामान्य अपवाद-releated टैग का उपयोग करने में सक्षम हो सकता है। –