关于java:当自定义异常遇到反射

5次阅读

共计 819 个字符,预计需要花费 3 分钟才能阅读完成。

遇到问题

  1. 自定义异样:LogicExcetion
  2. 在办法调用的最外层 method.invoke() 处 catch(LoginException e)
  3. 办法抛 LogicExcetion 未被捕捉,控制台输入 InvocationTargetException

剖析起因

如图:

反射办法只返回以上几种异样,其中 InvocationTargetException 的形容:如果底层办法抛出一个异样,则会封账在该异样中进行抛出

解决问题

InvocationTargetException 异样中的变量 target 即为底层办法抛出的异样,所以能够这样批改,贴源码:

try {Object res = method.invoke(handler, params);
            if (res instanceof Message) {Message message = (Message) res;
                session.sendPacket(message);
            }
        } catch (SecurityException | IllegalAccessException | IllegalArgumentException e) {e.printStackTrace();
        } catch (InvocationTargetException e) {Throwable cause = e.getCause();
            if (cause instanceof LogicException) {LogicException le = (LogicException) cause;
                switch (le.getType()) {
                    case CLIENT_EXCEPTION:
                        session.sendPacket(new ResLogicError(le.getMsg()));
                        break;
                    case LOGIC_EXCEPTION:
                        logger.error("代码逻辑谬误:{}", le.getMsg());
                        break;
                    default:
                        break;
                }
            }
        }

最初

集体简略了解,不对之处还望斧正!

正文完
 0