如何解决Java用外部类扩展抽象类
我想要一个抽象类InitException
来表示一组类,即StartParameterException
、FileNotFoundException
等。我自己定义了StartParameterException
,但是{{ 1}} 是我导入的标准异常。所以我不能像在我自己的类中那样将 FileNotFoundException
添加到它的定义中:
extends InitException
重点是改变这个:
public class StartParameterException extends InitException {
...
}
到这里
try {
...
} catch (StartParameterException | FileNotFoundException | InvalidpathException | NullBoardException e) {
System.out.println(e);
System.exit(INIT_ERROR);
}
这可能吗?我应该以某种方式使用接口吗?
解决方法
您可以尝试创建一组异常类。然后检查捕获的异常是否在集合内
Set<Class<?>> setClassesInitExc = new HashSet<>();
setClassesInitExc.add(FileNotFoundException.class);
setClassesInitExc.add(InvalidPathException.class);
setClassesInitExc.add(StartParameterException.class);
setClassesInitExc.add(NullBoardException.class);
try {
...
} catch(Exception e) {
if (setClassesInitExc.contains(e.getClass())) {
System.out.println(e);
System.exit(InitException.ERROR_CODE);
}
}
,
另一种方法是使用支持的异常类型创建一个 enum
并添加一些处理每个异常所需的上下文,如下所示:
public enum ExceptionEnum {
START_PARAMETER_EXCEPTION(StartParameterException.class,"Start parameter exception occurred",1),FILE_NOT_FOUND_EXCEPTION(FileNotFoundException.class,"Required file is not found",2),INVALID_PATH_EXCEPTION(InvalidPathException.class,"Given path is not valid",3),NULL_BOARD_EXCEPTION(NullBoardException.class,"Null board exception occurred",4);
private Class exceptionClass;
private String errorMessage;
private int exitCode;
public Class getExceptionClass() {
return exceptionClass;
}
public String getErrorMessage() {
return errorMessage;
}
public int getExitCode() {
return exitCode;
}
ExceptionEnum(Class exceptionClass,String errorMessage,int exitCode) {
this.exceptionClass = exceptionClass;
this.errorMessage = errorMessage;
this.exitCode = exitCode;
}
public static ExceptionEnum fromExceptionClass(Class clazz) {
for (ExceptionEnum exceptionEnum : ExceptionEnum.values()) {
if (exceptionEnum.getExceptionClass().isAssignableFrom(clazz)) {
return exceptionEnum;
}
}
return null;
}
}
可以为每个异常添加更多上下文,这样可以更好地控制如何在运行时处理单个异常:
try {
//....
} catch (Exception e) {
ExceptionEnum exceptionEnum = ExceptionEnum.fromExceptionClass(e.getClass());
if(exceptionEnum != null) {
System.out.println(exceptionEnum.getErrorMessage());
System.exit(exceptionEnum.getExitCode());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。