从 xml 反序列化对象时,我试图捕获 ClassCastException。
所以,
try {
restoredItem = (T) decoder.readObject();
} catch (ClassCastException e){
//don't need to crash at this point,
//just let the user know that a wrong file has been passed.
}
但这不会,因为没有捕获到异常。你有什么建议?
最佳答案
问题中的代码应该给你一个未经检查的强制转换警告。听 -Xlint。
编译器对 T 的所有了解就是它的边界,它可能没有边界(除了显式扩展 Object 和 null 类型的父类(super class))。因此,运行时的转换实际上是 (Object) - 不是很有用。
您可以做的是传入参数化类型的类实例(假设它不是通用的)。
class MyReader<T> {
private final Class<T> clazz;
MyReader(Class<T> clazz) {
if (clazz == null) {
throw new NullPointerException();
}
this.clazz = clazz;
}
public T restore(String from) {
...
try {
restoredItem = clazz.cast(decoder.readObject());
...
return restoredItem;
} catch (ClassCastException exc) {
...
}
}
}
或者作为通用方法:
public <T> T restore(Class<T> clazz, String from) {
...
try {
restoredItem = clazz.cast(decoder.readObject());
...
关于java - 我如何捕获 ClassCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186917/