Unchecked将 Java 的检查出异常”破解为“未检查出任何异常Exception”。
当你遭遇Exception异常时,你需要使用try{}捕获处理这个异常,或者将这个异常依然抛出,只有这两种选择。
这两种选择都不好,首先使用try{}捕获异常,那么就需要涉及一些业务逻辑的处理,你可能需要检查一下你调用代码的API,或源代码,研究它为什么抛出异常,这让你偏离你自己正在展开的业务逻辑处理。
照常抛出异常,好像是一种不负责任,使得你得代码造成隐患。
当然,抛出异常最影响的是函数式编程,如下:
List.of("LICENSE", "README.md", "Unchecked.java").stream()
.map(file -> {
**try** {
**return**(file + ": " + Files.lines(Paths.get(file)).count());
} **catch** (IOException e) {
**throw** **new** RuntimeException(e); _// java made me do it_ }
})
.toList();
在stream这个流的函数式操作中,你需要使用try来捕获异常,是不是很滑稽?
使用了这个Unchecked Java以后,你的代码就变成真正流式函数式代码:
List.of("LICENSE", "README.md", "Unchecked.java").stream()
.map(file -> file + ": " + Files.lines(Paths.get(file)).count())
.toList();
当您无法处理已检查的异常时,通常的做法是将其作为RuntimeException重新抛出。
这种做法除了代码污染外,这样做的问题是异常的根本原因被隐藏起来,有时如果开发人员忘记保留它,异常就会丢失。
使用这个Unchecked Java开源项目,封装已检查异常不再是必要的。异常将被传回调用栈。
Unchecked Java开源项目不会对字节码进行任何修改。这是因为JVM不知道已检查异常。
一直以来都是编译器在捣鬼。
使用依赖:
io.github.rogerkeays
unchecked
0.4.2
compile
配置编译插件:
org.apache.maven.plugins
maven-compiler-plugin
3.11.0
-Xplugin:unchecked
-J--add-opens=java.base/java.lang=ALL-UNNAMED
**true**
...
注意,旧版本的编译器插件使用不同的语法。详情请参考Maven编译器插件文档。确保添加 true 选项。
要添加nowarn参数,使用 -Xplugin:unchecked nowarn 。
目前支持:
为确保与现有代码的向后兼容性,Unchecked被用于编译和测试以下开源项目:
开源项目: https://github.com/rogerkeays/unchecked
更多函数式编程:https://www.jdon.com/tag-10341/