Unchecked将 Java 的检查出异常”破解为“未检查出任何异常Exception”。
当你遭遇Exception异常时,你需要使用try{}捕获处理这个异常,或者将这个异常依然抛出,只有这两种选择。
这两种选择都不好,首先使用try{}捕获异常,那么就需要涉及一些业务逻辑的处理,你可能需要检查一下你调用代码的API,或源代码,研究它为什么抛出异常,这让你偏离你自己正在展开的业务逻辑处理。
照常抛出异常,好像是一种不负责任,使得你得代码造成隐患。
当然,抛出异常最影响的是函数式编程,如下:
List.of("LICENSE", "README.md", "Unchecked.java").stream() |
在stream这个流的函数式操作中,你需要使用try来捕获异常,是不是很滑稽?
使用了这个Unchecked Java以后,你的代码就变成真正流式函数式代码:
List.of("LICENSE", "README.md", "Unchecked.java").stream() |
当您无法处理已检查的异常时,通常的做法是将其作为RuntimeException重新抛出。
这种做法除了代码污染外,这样做的问题是异常的根本原因被隐藏起来,有时如果开发人员忘记保留它,异常就会丢失。
使用这个Unchecked Java开源项目,封装已检查异常不再是必要的。异常将被传回调用栈。
Unchecked Java开源项目不会对字节码进行任何修改。这是因为JVM不知道已检查异常。
一直以来都是编译器在捣鬼。
使用依赖:
<dependency> |
配置编译插件:
<build> |
注意,旧版本的编译器插件使用不同的语法。详情请参考Maven编译器插件文档。确保添加<fork>true</fork>选项。
要添加nowarn参数,使用<arg>-Xplugin:unchecked nowarn</arg>。
目前支持:
- jdk-09.0.4
- jdk-10.0.2
- jdk-11.0.8
- jdk-12.0.2
- jdk-13.0.2
- jdk-14.0.2
- jdk-15.0.2
- jdk-16.0.2
- jdk-17.0.2
- jdk-18.0.2.1
- jdk-19.0.2
- jdk-20.0.1
- jdk-21 (early access)
- jdk-22 (early access)
为确保与现有代码的向后兼容性,Unchecked被用于编译和测试以下开源项目:
项目点击标题