首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java强制转换异常(不是类强制转换异常)

Java强制转换异常(不是类强制转换异常)
EN

Stack Overflow用户
提问于 2010-11-14 05:38:13
回答 4查看 7.9K关注 0票数 3

在java中捕获异常时,是否有将异常转换为新类型的用例?或者是标准的

代码语言:javascript
复制
    throw new DiffException(e)

唯一的办法就是。如果我忽略了什么,我道歉,但我得到的唯一搜索结果是"ClassCastExceptions“,这显然不是我要找的

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-14 05:41:46

我相信你指的是'exception wrapping'。没有其他方法可以做到这一点-使用构造函数创建一个新的Exception实例,该构造函数将另一个异常作为原因。这要归功于1-arg constructor of java.lang.Exception。自定义异常类型的典型实现(如您的DiffException)也声明了这样的1-arg构造函数。

票数 7
EN

Stack Overflow用户

发布于 2010-11-14 05:42:08

好吧,如果捕获的异常(我想在您的例子中是e)是DiffException的一个子类型,那么您当然可以将它转换为

代码语言:javascript
复制
throw (DiffException) e;

但我怀疑这是您想要做的事情,因为这不会有什么不同(即使在接收端,e仍然具有相同的运行时类型)。

所以答案很可能是, no ,没有其他等价的方法

代码语言:javascript
复制
throw new DiffException(e);

而不是这么做。

然而,应该注意的是,执行new DiffException(e)并不称为强制转换,而是包装或链接异常。

票数 4
EN

Stack Overflow用户

发布于 2010-11-14 06:17:21

由于您提到了用例,Java中的常见用例是将已检查的异常包装为未检查的异常;当已检查的异常不可能发生时,这是合适的,例如:

代码语言:javascript
复制
public static Reader getUTF8Reader(InputStream is) {
    try {
        return new InputStreamReader(inputStream, "UTF-8");
    } catch(UnsupportedEncodingException e) {
        // should never happen since UTF-8 is guaranteed to be available as per
        // http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html
        throw new RuntimeException("UTF-8 not available", e);
    }
}

如果不包装异常,您要么不得不接受它(这感觉是错误的),要么将该方法声明为throws UnsupportedEncodingException,这将迫使任何使用它的人捕获永远不会抛出的异常。总而言之,调用者没有责任处理不太可能的情况,但我们在不太可能的情况下得到了保护,即UTF-8在未来的一些不知名的平台上不可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4174869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档