gpt4 book ai didi

java - java中抛出异常重构

转载 作者:行者123 更新时间:2023-12-02 09:07:04 25 4
gpt4 key购买 nike

我正在更改我的代码

Implementation 1 : 
public User getUser(String userid) {
User user;
try {
// some code to get User

}catch(InterruptedException e) {
throw new CustomException();
}

return user;
}

Implementation 2 : 
public User getUser(String userid) {
User user;

try {
// some code to get User

}catch(InterruptedException e) {
SomeHandlerInProject.throwCustomErr();
}

return user;
}


class SomeHandlerInProject {
public static void throwCustomErr() {
throw new CustomException();
}
}

实现 2 给出编译错误,用户可能未初始化,有人可以帮助我在这里缺少什么,对我来说似乎很奇怪。

最佳答案

编译器不知道SomeHandlerInProject.throwCustomErr()总是会抛出异常,因此就编译器代码分析而言,该方法可能会正常返回。

如果是的话, user 的值是多少?是?它不会有值,因此编译器会提示这一点,这是理所应当的。记住,类(class)SomeHandlerInProject可以更改为不抛出异常,而无需使用 getUser() 重新编译该类方法,因此编译器提示它是正确的。

即使知道该方法总是抛出异常,您仍然必须编写代码,就好像它不会抛出异常一样,因此您必须为 user 分配一个值。 ,或者通过初始化它,或者通过在 catch 中分配给它 block 。

如果目标是共享构建异常所需的逻辑,则应该使用辅助方法 return异常,不抛出它,并让调用者执行 throw 。这样编译器就不会提示:

public User getUser(String userid) {
User user;
try {
// some code to get User
} catch (InterruptedException e) {
throw SomeHandlerInProject.buildCustomErr();
}
return user;
}

class SomeHandlerInProject {
public static CustomException buildCustomErr() {
return new CustomException();
}
}

堆栈跟踪保持不变,因为它是为调用堆栈进行快照的构造函数位置。

关于java - java中抛出异常重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59726328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com