偷偷抛出必检异常的方法
由 ChatGPT 生成的文章摘要
编写 Java 程序时经常遇到烦人的必检异常。在一些情况下,我们需要在不能抛出必检异常的环境下抛出异常,这时我们可以使用工具类 Exceptions.throwExceptionSneakily(Throwable)。通过编写一个特定方法,我们可以在必检异常不可抛出的情况下实现抛出异常的目的。这个工具类可以帮助开发者解决在特定环境下抛出必检异常的问题。同时,更好的解决方法是使用支持 JVM 的新一代编程语言,如 Kotlin。

编写 Java 程序时经常遇到烦人的必检异常。必检异常在初衷上是好的,但是在工程中它常常带来许多麻烦。

例如,在一些不能抛出异常的环境下(如 JDK 的一些函数式接口配合流使用时)代码需要抛出必检异常,便只能包装成一种非必检异常(如 NestedException)再次抛出。但把异常包装成另一种类型,常常引来新的麻烦。

为了在不能抛出必检异常的环境下抛出必检异常,只需要编写如下工具类:

public class Exceptions {
    public static void throwExceptionSneakily(Throwable exception) {
        Objects.requireNonNull(t, "Exception is null!");
        doThrowExceptionSneakily(t);
    }

    @SuppressWarnings("unchecked")
    private static <T extends Throwable> void doThrowExceptionSneakily(Throwable t) throws T {
        throw (T)t;
    }
}

多编写一个 #doThrowExceptionSneakily(Throwable) 方法的原因是避免出现 Unexpected VM Exception like 'java.lang.NullPointerException' might be ignored in catch block 的警告。

通过这一工具便可以使用 Exceptions.throwExceptionSneakily(Throwable) 抛出必检异常了。开发者有义务仅在内部使用这一 API,或在对外开放 API 中标注相关情况,以免造成困扰。

更好的办法是使用 Kotlin 之类的支持 JVM 的新一代编程语言。

Not by AI

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇