首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中如何处理“不可能”的异常?

在Java中如何处理“不可能”的异常?
EN

Stack Overflow用户
提问于 2012-07-02 16:14:27
回答 3查看 3.3K关注 0票数 19

有时,我最终不得不捕获一个我知道永远不会发生的异常,比如这里

代码语言:javascript
复制
URLDecoder.decode("some string", "UTF-8"); //No unknown encoding possible

或者在这里:

代码语言:javascript
复制
public void methodWithURL(URL url){
    URI uri = new URI(url); //No invalud URI syntax possible
}

你是怎么处理这个问题的?我通常会记录一个关于宇宙法则如何改变的有趣错误,然后抛出一个RuntimeException。有没有更好的方法?

EN

回答 3

Stack Overflow用户

发布于 2012-07-02 16:42:24

我会跳过有趣的留言。

顺便说一句:我遇到过这样的情况,一段代码(在一个小的库中)只是假设一个编码是可用的。只是它被部署在一个有限的设备上,并在运行时爆炸。

检查异常用于显示代码中我们应该暂停一秒钟的地方,并考虑较少经过的路径(如“我的应用程序在网络崩溃时会做什么”和其他转折点情况)。将它们包装在IllegalStateException中并重新抛出是一种签署的合同,程序员说:“是的,考虑到所有风险,我对这里的位置承担全部责任”。如果不是因为检查异常,我们就无法从缺乏思考的情况下知道一个明智的决定。

票数 6
EN

Stack Overflow用户

发布于 2016-04-20 15:10:05

以下是我的解决方案--为Android开发的,但可以很容易地改编为“常规”Java:

代码语言:javascript
复制
public class ImpossibleException extends RuntimeException {
    public ImpossibleException(@NonNull String whyNotPossible) {
        this(whyNotPossible, null);
    }

    public ImpossibleException(@NonNull String whyNotPossible, Throwable throwable) {
        super("Impossible exception: " + whyNotPossible, throwable);
        Log.e("Impossible", whyNotPossible, throwable);
    }
}

用法:

代码语言:javascript
复制
try {
    byte[] data = "Hello".getBytes("utf-8");
    Log.i("Test", "data.length=" + data.length);
} catch (UnsupportedEncodingException e) {
    throw new ImpossibleException("Android always supports utf-8", e);
}

whyNotPossible构造函数意味着不需要在发生错误的地方记录错误,也不需要注释。

我猜这是一个口味问题,如果这应该是一个ImpossibleException extends RuntimeExceptionImpossibleError extends Error

票数 0
EN

Stack Overflow用户

发布于 2021-01-16 04:58:50

如果你在你的项目中使用Lombok,你可以用@SneakyThrows注释周围的方法,这类方法在RuntimeException中隐藏了检查过的异常(因此不需要用try-catch包围,也不需要在throws子句中声明它)。

例如:

代码语言:javascript
复制
@SneakyThrows(URISyntaxException.class)
public void methodWithURL(URL url){ // No throws here
    URI uri = new URI(url); // Assume no invalud URI syntax possible
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11289943

复制
相关文章

相似问题

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