gpt4 book ai didi

java - 我如何捕获 ClassCastException?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:03 26 4
gpt4 key购买 nike

从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com