例如,类型的异常:java.net.BindException可以抛出"已在使用的地址"(尝试绑定另一个程序使用的端口)或"权限被拒绝"(您没有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();
}
Run Code Online (Sandbox Code Playgroud)
那要看.如果这是您拥有或有权访问的代码,并且BindException不合适,那么您应该创建自己的异常:
public class PermissionDeniedException
Run Code Online (Sandbox Code Playgroud)
你甚至可以这样做:
public class PermissionDeniedBindException extends BindException
Run Code Online (Sandbox Code Playgroud)
但是,如果这不是你的班,那么无论您使用的是不希望你的BindException的区分和图书馆期待你在一些通用的方式来接收异常时(即只持续或总是一次尝试)的行为或者这是SDK中的一个问题.如果后者是这种情况并且该项目是开源的,我建议创建一个拉取请求.
否则,第三个选项当然就像你正在做的那样...但我不会建议它,因为它非常脆弱,只能通过修改消息来改变.
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |