gpt4 book ai didi

java - 区分相同类型的异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:32 24 4
gpt4 key购买 nike

例如,异常类型:java.net.BindException 可以抛出“Address already in use”(试图绑定(bind)另一个程序使用的端口)或“Permission denied”(你没有root权限打开这个端口号)。我不拥有抛出 BindException 的类。

那么,区分这些具有相同类型的“不同”异常的最佳实践是什么?

我正在这样做,但我不知道这是否是最佳做法:

try {
//...some scary stuffs here
}
catch (BindException e){
if (e.getMessage().contentEquals("Permission denied")){
System.out.println("ERROR**You must be ROOT to bind that port address TCP:"+defaultPort);
}
else if (e.getMessage().contentEquals("Address already in use")){
System.out.println("ERROR**Port TCP:"+defaultPort+" already in use by onother application");
}
e.printStackTrace();
}

最佳答案

这取决于。如果这是您拥有或有权访问的代码并且 BindException 不合适,那么您应该创建自己的异常:

public class PermissionDeniedException

你甚至可以这样做:

public class PermissionDeniedBindException extends BindException 

但是,如果这不是您的类(class),那么您正在使用的库可能不希望您区分 BindException 并且希望您在收到异常时以某种通用方式行事(即继续或总是再次尝试)或者这是 SDK 中的问题。如果是后者,并且该项目是开源的,我建议创建一个拉取请求。

否则,第三个选项当然是完全按照您的操作进行...但我根本不建议这样做,因为它非常脆弱并且可以通过修改消息来更改。

关于java - 区分相同类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28052825/

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