java用外部类扩展抽象类

oknrviil  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(437)

我想要一个抽象类 InitException 表示一组类,即。 StartParameterException , FileNotFoundException 等等 StartParameterException 我自己,但是 FileNotFoundException 是我导入的标准例外。所以我不能补充 extends InitException 根据它的定义,就像我为自己的类所做的那样:

  1. public class StartParameterException extends InitException {
  2. ...
  3. }

重点是改变这一点:

  1. try {
  2. ...
  3. } catch (StartParameterException | FileNotFoundException | InvalidPathException | NullBoardException e) {
  4. System.out.println(e);
  5. System.exit(INIT_ERROR);
  6. }

为了这个

  1. try {
  2. ...
  3. } catch (InitException e) {
  4. System.out.println(e);
  5. System.exit(InitException.ERROR_CODE);
  6. }

这可能吗?我应该使用一个接口吗?

9njqaruj

9njqaruj1#

另一种方法是创建 enum 使用支持的异常类型,并添加一些处理每个异常所需的上下文,如下所示:

  1. public enum ExceptionEnum {
  2. START_PARAMETER_EXCEPTION(StartParameterException.class, "Start parameter exception occurred", 1),
  3. FILE_NOT_FOUND_EXCEPTION(FileNotFoundException.class, "Required file is not found", 2),
  4. INVALID_PATH_EXCEPTION(InvalidPathException.class, "Given path is not valid", 3),
  5. NULL_BOARD_EXCEPTION(NullBoardException.class, "Null board exception occurred", 4);
  6. private Class exceptionClass;
  7. private String errorMessage;
  8. private int exitCode;
  9. public Class getExceptionClass() {
  10. return exceptionClass;
  11. }
  12. public String getErrorMessage() {
  13. return errorMessage;
  14. }
  15. public int getExitCode() {
  16. return exitCode;
  17. }
  18. ExceptionEnum(Class exceptionClass, String errorMessage, int exitCode) {
  19. this.exceptionClass = exceptionClass;
  20. this.errorMessage = errorMessage;
  21. this.exitCode = exitCode;
  22. }
  23. public static ExceptionEnum fromExceptionClass(Class clazz) {
  24. for (ExceptionEnum exceptionEnum : ExceptionEnum.values()) {
  25. if (exceptionEnum.getExceptionClass().isAssignableFrom(clazz)) {
  26. return exceptionEnum;
  27. }
  28. }
  29. return null;
  30. }
  31. }

可以为每个异常添加更多的上下文,这样就可以更好地控制如何在运行时处理单个异常:

  1. try {
  2. //....
  3. } catch (Exception e) {
  4. ExceptionEnum exceptionEnum = ExceptionEnum.fromExceptionClass(e.getClass());
  5. if(exceptionEnum != null) {
  6. System.out.println(exceptionEnum.getErrorMessage());
  7. System.exit(exceptionEnum.getExitCode());
  8. }
  9. }
展开查看全部
fkaflof6

fkaflof62#

您可以尝试创建一组异常类。然后检查捕获的异常是否在集合中

  1. Set<Class<?>> setClassesInitExc = new HashSet<>();
  2. setClassesInitExc.add(FileNotFoundException.class);
  3. setClassesInitExc.add(InvalidPathException.class);
  4. setClassesInitExc.add(StartParameterException.class);
  5. setClassesInitExc.add(NullBoardException.class);
  6. try {
  7. ...
  8. } catch(Exception e) {
  9. if (setClassesInitExc.contains(e.getClass())) {
  10. System.out.println(e);
  11. System.exit(InitException.ERROR_CODE);
  12. }
  13. }

相关问题