抛出异常,是不是错误处理的第一选择

Java 语言支持三种异常的状况:非正常异常(Error),运行时异常(Runtime Exception)和检查型异常(Checked Exception)。

异常状况的处理会让代码的效率变低,所以我们不应该使用异常机制来处理正常的状况。一个流畅的业务,理想的情况是,在执行代码时没有任何异常发生。否则,业务执行的效率就会大打折扣。

改进方案:共用错误码

js 复制代码
public sealed interface Returned<T> {
    record ReturnValue<T>(T returnValue) implements Returned {
    }
    
    record ErrorCode(Integer errorCode) implements Returned {
    }
}    

在这个改进的设计里,我们使用了封闭类。我们知道封闭类的子类是可以穷举的,这是这项改进需要的一个重要特点。我们把 Returned 的许可类(ReturnValue 和 ErrorCode)定义成档案类,分别表示返回值和错误代码。这样,我们就有了一个精简的方案。

一个方法,返回的要么是返回值,要么是错误码,而不是同时返回两个值。

js 复制代码
public static Returned<Digest> of(String algorithm) {
    return switch (algorithm) {
        case "SHA-256" -> new ReturnValue(new SHA256());
        case "SHA-512" -> new ReturnValue(new SHA512());
        case null, default -> new ErrorCode(-1);
    };
}

返回 ReturnValue 这个许可类,就表示没有错误;返回 ErrorCode 这个许可类,就表示出现错误。这样的设计,就变得简单、皮实多了。

种方式仍然具有一些缺陷,例如它本身没有携带调试信息。在 Java 的错误处理方面,我们希望未来能够有更好的设计和更多的探索,让我们的代码更完善。


此文章为9月Day10学习笔记,内容来源于极客时间《深入剖析 Java 新特性》

相关推荐
狗头大军之江苏分军6 分钟前
Node.js 性能优化实践,但老板只关心是否能跑
前端·后端
李拾叁的摸鱼日常14 分钟前
Java泛型基本用法与PECS原则详解
java·后端·面试
狗头大军之江苏分军15 分钟前
Node.js 真香,但每次部署都想砸电脑
前端·javascript·后端
帅那个帅1 小时前
go的雪花算法代码分享
开发语言·后端·golang
酒酿萝卜皮1 小时前
Elastic Search 聚合查询
后端
程序员清风1 小时前
阿里二面:新生代垃圾回收为啥使用标记复制算法?
java·后端·面试
sino爱学习1 小时前
Java 三元表达式(?:)的常见坑总结
java·后端
❀͜͡傀儡师1 小时前
Spring Boot函数式编程:轻量级路由函数替代传统Controller
java·spring boot·后端
Drift_Dream2 小时前
Node.js 第二课:用核心模块构建你的第一个服务器
前端·后端